2013年12月

Strict Standards: Non-static method ... 错误的解决办法

错误提示:

Strict Standards: Non-static method xxx() should not be called statically

原因

使用了self的静态方式调用了方法,但方法没有定义静态static

解决办法:

修改被调用方法为公共静态方法,即:

public static function xxx(){...}

禁止php执行linux系统命令

  • 多命令如 shell_execsystempassthrupopen 等都是系统相关的合作,如果虚拟主机开放给使用者使用,或是在系统权限没设定完整的情况下,必然会造成很大的伤害;同时网站在有漏洞的情况下,也会对服务器造成很大伤害
  • 要达到这个需求,只要在 php.ini 里设定 disble_function 这个选项就能设定禁止执行的指令了。
disble_function = phpinfo
  • 要多个指令的话,用逗点隔开,如:
disble_function = shell_exec, system, passthru, popen
  • 典型的安全性配置,請參考如下設置:
disable_functions = shell_exec,system,exec,passthru,show_source,get_cfg_var

PHP curl获取内容

因为php原生函数file_get_contents()无发获取https协议头的url内容(需要mod_ssl的支持,或安装opensll

  • windows下的PHP,只需要到php.ini中把extension=php_openssl.dll前面的;删掉,重启服务就可以了。
  • linux下的PHP,就必须安装openssl模块,安装好了以后就可以访问了。
  • 使用curl模块获取url的封装函数如下:
    /**
     * 抓取的url链接内容
     * @param string $url    要抓取的url链接,可以是http,https链接
     * @param int $second    设置cURL允许执行的最长秒数
     * @return mixed    
     */
    function get_curl_contents($url, $second = 30)
    {
        $ch = curl_init();
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch,CURLOPT_TIMEOUT,$second);//设置cURL允许执行的最长秒数
        curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);//当此项为true时,curl_exec($ch)返回的是内容;为false时,curl_exec($ch)返回的是true/false
             
        //以下两项设置为FALSE时,$url可以为"https://login.yahoo.com"协议
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  FALSE);
     
        $content = curl_exec($ch);
        curl_close($ch);
        return $content;
    }