专栏首页后端码事PHP 问题合集

PHP 问题合集

一、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中的stdClass

PHP5中新增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和之前的不一样。中间没有横线。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RPC框架及序列化方式选择

    WindWant
  • Spring Bean的加载

    不等bean创建完成就会将创建bean的ObjectFactory提早曝光加入到缓存中。

    WindWant
  • zookeeper应用:屏障、队列、分布式锁

    项目地址:https://github.com/windwant/windwant-demo/tree/master/zookeeper-service

    WindWant
  • PHP网络爬虫之CURL

    php的curl可以实现模拟http的各种请求,这也是php做网络爬虫的基础,也多用于接口api的调用。 PHP 支持 Daniel Stenberg 创建的 ...

    benny
  • PHP使用curl取HTTP状态码

    V站CEO-西顾
  • Linux常用命令08 - curl

    curl 是一个命令行实用程序,用于将数据从服务器或传输到服务器,该服务器设计用于在没有用户交互的情况下工作。 使用 curl,您可以使用支持的协议(包括 HT...

    叉叉敌
  • php使用CURL模拟POST请求函数

    本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

    仙士可
  • 10个 ThinkPHP 开发常用代码片段

    在编写代码的时候有个神奇的汇总是好的!下面这里收集了 10+ PHP 代码片段,可以帮助你开发 PHP 项目。这些 PHP 片段对于 PHP 初学者也非常有帮助...

    php007
  • PHP使用CURL模拟POST和GET请求

    在PHP中想要构造类似GET和POST请求,在一些APP或者等后端功能开发中是有这种需求。 在PHP语言当中有file_get_content ()函数和cur...

    WZR
  • PHP扩展功能--cURL

    cURL 表示以命令行的形式请求某个 url, 提交数据或获取相应数据。在日常的程序开发中会用到,因此,了解 cURL 的原理和过程,有助于实际工作和项目中的应...

    程序小工

扫码关注云+社区

领取腾讯云代金券