在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、PHP curl https访问问题原代码: /* @String url URL地址 * @Array data POST数据 * @Resource curl cURL对象 * @return info 返回信息 */ $curl = curl_init(); // 启动一个cURL会话 curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址 curl_setopt($curl, CURLOPT_HEADER, 0); //返回header部分 curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/xml")); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //返回字符串,而非直接输出 curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器 curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 $info = curl_exec($curl); // 执行操作并返回数据 curl_close($curl); // 关闭cURL会话 https访问错误,加入了cURL查看错误方法curl_error() $error = curl_error ($curl);//需放在curl_close($curl)执行之前 var_dump($error); 返回的错误信息为: SSL certificate problem, verify that the CA cert is OK HTTPS协议服务器进行SSL验证的问题 解决方法有多种,可以将HTTPS改为使用HTTP协议(可行的情况下),也可以通过cURL选项设置为禁止验证(推荐): curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 参看PHP手册中关于cURL选项的描述:PHP: curl_setopt CURLOPT_SSL_VERIFYPEER: 禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。 CURLOPT_SSL_VERIFYHOST: 检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。2 检查公用名是否存在,并且是否与提供的主机名匹配。 注意按手册规定: CURLOPT_SSL_VERIFYPEER 属于应该被赋予一个bool类型值的选项; CURLOPT_SSL_VERIFYHOST 属于应该被赋予一个integer的选项。 更改之后问题就解决了。 值得一提的是,当cURL出现错误和问题时,curl_exec()将返回FALSE,可以使用上面提到的curl_error()方法输出错误原因。此方法必须在curl_close()之前使用。 二、检测字符串是否由纯英文,纯中文,中英文混合组成*function:检测字符串是否由纯英文,纯中文,中英文混合组成 *param string *return 1:纯英文;2:纯中文;3:中英文混合 */ public function check_str($str=''){ if(trim($str)==''){ return ''; } $m=mb_strlen($str,'utf-8'); $s=strlen($str); if($s==$m){ return 1; } if($s%$m==0&&$s%3==0){ return 2; } return 3; } 三、Composer管理PHP包安装 Composer包含两大逻辑部分:一个是用来存储包,另一个是命令行应用程序,帮助你发现、下载、更新和分享代码。 $ cd/path/to/my/project $ curl -s http://getcomposer.org/installer| php 在项目列表中,会有一个composer.phar文件,里面包含了所有逻辑代码行工具。你可以通过运行下面代码来确定是否安装成功。 $ php composer.phar 这个命令执行后会显示所有可用的命令。 我个人比较建议大家使用这个命令: $ sudo mv composer.phar /usr/bin/composer 把这个文件移到bin目录下,它允许你简化命令。 $ composer about 四、PHP5中的stdClassPHP5中新增stdClass 官方手册参考:http://www.php.net/manual/en/language.oop5.basic.php#92123 stdClass类是PHP的一个内部保留类,初始时没有成员变量也没成员方法,所有的魔术方法都被设置为NULL,可以使用其传递变量参数,但是没有可以调用的方法。stdClass类可以被继承,只是这样做没有什么意义。 该类是PHP的保留类,并不是所有类的基类。 <?php class foo {} $bar = new foo(); echo $bar instanceof stdClass?'yes':'no'; //output:no 另外一个例子: <?php // CTest does not derive from stdClass class CTest { public $property1; } $t = new CTest; var_dump($t instanceof stdClass); // false var_dump(is_subclass_of($t, 'stdClass')); // false echo get_class($t) . "\n"; // 'CTest' echo get_parent_class($t) . "\n"; // false (no parent) ?> 任何用(object)强制转换都会得到一个stdClass的实例。 五、php中文乱码问题HTML中文乱码问题的解决方法。 比如有个index.html的页面(这里是指真正的静态页面,修改服务器的……伪静态的请看方案B) 1.在head标签里面加入这句 <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> 2.将文件的编码存为UTF-8.记事本或Editplus等编辑器都有保存时选择编码的功能。 HTML和PHP混合的页面解决方案。 除了A方案说的那些之外。还要在文件的最上面加上下面这句代码。 <?php header("Content-type:text/html;charset=utf-8"); ?> 注意header前面不要有任何的输出(echo/print/print_r/var_dump等PHP的输出语句,或者是你在“<?php”前面回车/空格)。否则会报错。 如果你用系统自带的Notepad保存为UTF-8编码的文件时会报错,“<?php”标签前面经存在3个不可见元素。如果你用UltraEdit打开并切换到16进制模式可以看到前面多了“EF BB BF”。这是跟Windows识别编码的方式有关。Apache无法解析,把它当成了输出。导致header出错。 或者,直接使用Editplus保存为UTF-8即可。因为Editplus的UTF-8是去除了BOM的。 纯PHP页面的中文乱码解决方案(数据是静态的) 只要在页面的开始加上 <?php header("Content-type:text/html;charset=utf-8"); ?> 然后保存为UTF-8编码的文件即可。注意和方案B一样。注意用那些去除BOM的编辑器保存。否则还是会报错。 PHP+Mysql中文乱码解决方案 除了按方案C那样的做法外,还要在你的数据查询/修改/增加之前加入数据库编码。 <?php mysql_query('SET NAMES UTF8'); ?> 注意这里的UTF8和之前的不一样。中间没有横线。
|
2022-08-17
2022-11-06
2022-07-29
2022-08-18
2022-08-13
请发表评论