Guzzle post json数据

10. July 2018 PHP 0
向微信服务器提交json数据中文不进行编码,一些自动任务如服务直达搜索数据需使用服务器提交数据,使用php+guzzle+crontab定时提交数据。 $client = new Client([\'base_uri\' => \'https://api.weixin.qq.com/\']); foreach ($result as $value) { $promise = $client->request(\'POST\', \'wxa/setdynamicdata?access_token=\' . $token, [\'body\' => json_encode($value, JSON_UNESCAPED_UNICODE), \'headers\' => [\'content-type\' => \'application/json\']]); $sim = json_decode($promise->getBody()); ...... } request第三个参数中,注意使用body,值为json_encode($value, JSON_UNESCAPED_UNICODE),然后再设置headers 参数还可为json,会对中文进行encode编码 为multipart时,值为关联数组。 为form_params时,发送一个 application/x-www-form-urlencoded POST请求.

支付宝 支付接口接入

15. June 2018 PHP 0
一: 区别下应用公钥和支付宝公钥,这两个并不是一个东西,配置文件中需填写支付宝公钥。 应用公钥通过RSA签名工具计算出来,如下: 而支付宝公钥从支付宝开放平台获得,如下图: 配置文件中alipay_public_key 填写支付宝公钥 二: return_url 和 notify_url 分别为同步跳转地址和异步通知地址, 进行支付宝网页付款是通过get方式请求访问,支付成功后支付宝服务器通过post方式异步通知notify_url 指定的地址,若失败,会继续发送post请求,本地服务器异步地址验证成功后,记得确认已收到异步通知。 在支付成功后,这两个地址都会执行,同步跳转只执行一次,异步通知可重试多次,直到确认收到异步通知或超出官方设定通知重试时长。

PHP精度计算问题

13. June 2018 PHP 0
问题:浮点型运算 $a = 0.1; $b = 0.2; dd($a + $b == 0.3); 结果为false,浮点型数值运算不精确 解决方案: $a = 0.1; $b = 0.2; dd(bcadd($a, $b, 2) == 0.3); 结果为true bcadd — 将两个高精度数字相加 bccomp — 比较两个高精度数字,返回-1, 0, 1 bcdiv — 将两个高精度数字相除 bcmod — 求高精度数字余数 bcmul — 将两个高精度数字相乘 bcpow — 求高精度数字乘方 bcsqrt — 求高精度数字平方根 bcsub — 将两个高精度数字相减

PHP代码规范笔记

07. May 2018 PHP 0
1.变量名需有意义且可读 2.常量名称可搜索,如0,1最好使用const定义后使用 3.避免逻辑嵌套太深,判断条件尽可能提前返回 4.不增加不需要的上下文,如类名不在变量或函数中重复。 5.使用默认参数而非短路运算符或条件运算符。形参赋予类型和初始值。 6.形参不易过多,两个以下为宜,需要多个可封装对象传入。 7.函数应该只做一件事,避免过多逻辑。 8.函数名语义化,取出依赖关系。 9.避免函数副作用,函数内部使用超全局变量容易产生问题,global, 10.避免使用单例模式,单例模式隐藏依赖关系,难于测试,违反单一责任原则。 11.用函数封装条件语句,返回布尔值。 12.尽量避免反义判断。过多反义判断降低代码可读性。 13.避免类型检查 14.移除无用代码 15.对象封装注意使用public, protected and private,优先使用private 16.组合优于继承。 17.避免流式调用,否则将难以测试。 18.类名以大写开头的驼峰命名规范,方法名以小写开头驼峰命名规范,类中的常量所有字母都 必须 大写,单词间用下划线分隔; 19.代码 必须 使用 4 个空格来进行缩进, 并且 一定不能 使用 tab 键来缩进。 20.命名空间和use后需存在一个空行。 21.方法参数中,每个逗号后有空格,前面没有空格。 22.需要添加 abstract 或 final 声明时,必须 写在访问修饰符前,而 static 则 必须 写在其后。·  

PHP中isset,empty,array_key_exists布尔值问题

02. February 2018 PHP 0
<?php /** * Created by PhpStorm. * User: lijian * Date: 1/25/18 * Time: 4:47 PM */ $a=1; $b=0; $c=”; $d=null; $e=false; var_dump(isset($a)); var_dump(isset($b)); var_dump(isset($c)); var_dump(isset($d)); var_dump(isset($e)); var_dump(isset($f)); echo ‘————-‘.”n”; var_dump(empty($a)); var_dump(empty($b)); var_dump(empty($c)); var_dump(empty($d)); var_dump(empty($e)); var_dump(empty($f)); echo ‘——-Array——‘.”n”; $data[‘a’]=1; $data[‘b’]=0; $data[‘c’]=”; $data[‘d’]=null; $data[‘e’]=false; var_dump(array_key_exists(‘a’,$data)); var_dump(array_key_exists(‘b’,$data)); var_dump(array_key_exists(‘c’,$data)); var_dump(array_key_exists(‘d’,$data)); var_dump(array_key_exists(‘e’,$data)); var_dump(array_key_exists(‘f’,$data)); 输出结果: bool(true) bool(true) bool(true) bool(false) bool(true) ...

PHP 基础知识

02. February 2018 PHP 0
1.Get和Post区别 ①Get幂等,Post不幂等(幂等是指同一个请求方法执行多次和仅执行一次的效果完全相同)。 ②Get是从服务器上获取数据,post是向服务器传送数据。 Get适合传送小数据,IE下url长度限制2083(2K+35),Http协议规范没有对url长度限制,不同浏览器对url长度限制不尽相同,Chrome这种主流浏览器,正常使用最好在4096(4k)以下,有人     统计最高可到7675,具体数据不知。 Post没有长度限制,但受服务器配置限制,如post_max_size,也受脚本执行时间,内存等限制。 除此之外,还有 PUT:在服务器更新资源(客户端提供改变后的完整资源) PATCH:在服务器更新资源(客户端提供改变的属性) DELETE:从服务器删除资源 HEAD:获取资源的元数据 OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的 ③Get 只接受ASCII字符,URL对所有人可见。Post没有限制,通过请求header请求。当然抓包的话,可以看到。 ④Get请求方式,浏览器把http header 和data一起发送出去,服务器相应200,返回数据。 Post请求,浏览器先发送header,服务器相应100 (Continue 初始的请求已经接受,客户应当继续发送请求的其余部分),浏览器再发送data,服务器相应200,返回数据。 2.Cookie 和 Session 的区别和关系 ①cookie存在浏览器,根据请求的路径自动发送(包括Ajax请求),请求在服务器端进行处理。 session是存在服务器的,用于区分会话和不同用户的访问,session可存在内存,数据库,文件中。session id存在cookie中,服务器端根据客户端发过来的cookie中的session id来判断保持会话。 ②cookie 数量和大小有限制,不同浏览器对同一网站下最大cookie数不相同,每个域名cookie限制为20个不在正确,最少也是30.大小限制4K。超出后内容将丢失。Session 无此限制。 3.单引号和双引号的区别 双引号中可以包含字符串变量,能被解释器替换。单引号中的内容看成普通字符串,即使有变量也不会被解释器替换。 4.isset 和 empty 的区别 参考:‘https://www.wizardcode.cn/2018/02/02/45.html’ php中 零,空字符串,false,null ,不存在的变量 在empty中都返回true。 php中,null和不存在的变量在isset中返回false。 php数据中,键名存在,键值为null,可通过array_key_exists判断是否存在。 5.echo、print_r、print、var_dump 之间的区别 echo 可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。 print 函数print打印一个值,如果字符串成功显示则返回true,否则返回false。 print_r() 可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。但print_r()输出布尔值和NULL的结果没有意义,因为都是打印”n”。 var_dump() ...

PHP添加xdebug插件,配置PHPStorm调试

19. August 2017 PHP 0
第一步:打开https://xdebug.org/wizard.php,把phpinfo()的内容复制进去,然后根据系统提示走步骤,把xdebug.so放到php.ini中。 第二步:修改php.ini文件,基础配置如下:(刚开始使用,以后用到再添加) xdebug.remote_enable=on //开启调试功能 xdebug.remote_host=\"localhost\" //配置调试服务器域名或IP地址 xdebug.remote_port=9000 //设置端口号,不能被占用 xdebug.idekey=\"phpstorm\" //设置idekey名称,和PHPstorm对应 第三步:重启web服务器。 第四步:配置PHPstorm

PHP上传限制文件大小参数修改

20. February 2017 PHP 0
打开php.ini,首先找到 file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开 upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹 upload_max_filesize = 8m; 即允许上传文件大小的最大值。默认为2M post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值 max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒) max_input_time = 600 ;每个PHP页面接收数据所需的最大时间 memory_limit = 8m ;每个PHP页面所吃掉的最大内存 重启服务器,然后试试上传文件是否成功了。

PHP使用ODBC链接access数据库

08. February 2017 PHP 0
<?php header(“Content-type: text/html; charset=utf-8″); //设置编码 $connstr=”DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=” . realpath(“test.mdb”);//链接access数据库 $connid=odbc_connect($connstr,””,””,SQL_CUR_USE_ODBC);//odbc链接函数 //access默认是中文gb2312编码,php通常使用utf-8编码,在插入和读取中文数字的时候,需要使用一下函数进行编码转换 function utf_gbk($data) { //utf-8编码转gb2312 return iconv(“utf-8″,”gb2312//IGNORE”,”$data”); } function gbk_utf($data) { //gb2312转utf-8 return iconv(“gb2312″,”utf-8//IGNORE”,”$data”); } $sec=”select * from user”; //查询数据 try { $result=odbc_exec($connid,$sec); $data=array(); while ($data[]=odbc_fetch_array($result)) { } var_dump($data); } catch (Exception $e) { } $dd=utf_gbk(“赛亚人”); //插入数据库前进行编码转换 $sql=”update user set u_name=’$dd’ where ...

PHP知识点总结

07. February 2017 PHP 0
display_errors=on 开启php错误提示,上线项目应设置为off error_reporting(E_ALL); //测试页面输出错误提示 ini_set(\'display_errors\', TRUE);//错误输出提示,本页面有效,优先级高于php.ini ini_set(\'display_startup_errors\', TRUE); //运行时错误开启,开发阶段开启 date_default_timezone_set(\'Europe/London\');//设置时区 PHP_EOL 换行符 unix系列用 n windows系列用 rn mac用 r PHP中可以用PHP_EOL来替代,以提高代码的源代码级可移植性 php可以使用“,”“.”作为连接符,区别参考:http://blog.csdn.net/xuz0917/article/details/50678243 error_reporting 设置错误报告的级别, 常见的错误级别有 value 说明 E_ALL 显示所有错误报告 E_ERROR 显示导致脚本结束的致命错误 E_WARNING 一般警告, 如方法过时等 E_NOTICE 常见变量未定义或数组索引未定义