• 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) . "
    ";                   // 'CTest'
    
    echo get_parent_class($t) . "
    ";            // 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等编辑器都有保存时选择编码的功能。

     HTMLPHP混合的页面解决方案。

    除了A方案说的那些之外。还要在文件的最上面加上下面这句代码。

    <?php  

    header("Content-type:text/html;charset=utf-8");  

    ?>   

    注意header前面不要有任何的输出(echo/print/print_r/var_dumpPHP的输出语句,或者是你在“<?php”前面回车/空格)。否则会报错。 如果你用系统自带的Notepad保存为UTF-8编码的文件时会报错,“<?php”标签前面经存在3个不可见元素。如果你用UltraEdit打开并切换到16进制模式可以看到前面多了“EF BB BF”。这是跟Windows识别编码的方式有关。Apache无法解析,把它当成了输出。导致header出错。 或者,直接使用Editplus保存为UTF-8即可。因为EditplusUTF-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和之前的不一样。中间没有横线。

  • 相关阅读:
    滴滴Ceph分布式存储系统优化之锁优化
    滴滴数据仓库指标体系建设实践
    滴滴AI Labs斩获国际机器翻译大赛中译英方向世界第三
    滴滴数据通道服务演进之路
    可编程网卡芯片在滴滴云网络的应用实践
    GPU虚拟机创建时间深度优化
    滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析
    使用zip()并行迭代
    循环结构
    选择结构
  • 原文地址:https://www.cnblogs.com/niejunlei/p/5318909.html
Copyright © 2020-2023  润新知