首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP 问题合集

PHP 问题合集

作者头像
WindWant
发布2020-09-11 10:23:46
9820
发布2020-09-11 10:23:46
举报
文章被收录于专栏:后端码事后端码事

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、PHP curl https访问问题
  • 二、检测字符串是否由纯英文,纯中文,中英文混合组成
  • 三、Composer管理PHP包
  • 四、PHP5中的stdClass
  • 五、php中文乱码问题
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档