admin 发布的文章

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;
    }

HTTP/1.0 中,状态码 200 301 304 403 404 500的含义

  • 如果某项请求发送到您的服务器要求显示您网站上的某个网页(例如,用户通过浏览器访问您的网页或 Googlebot抓取网页时),服务器将会返回 HTTP 状态码响应请求。
  • 此状态码提供关于请求状态的信息,告诉 Googlebot 关于您的网站和请求的网页的信息。
  • 一些常见的状态码为:

    • 200 服务器成功返回网页
    • 404 请求的网页不存在
    • 503 服务器超时

  • 下面提供 HTTP 状态码的完整列表。点击链接可了解详情。您也可以访问 HTTP 状态码上的 W3C页获取更多信息。

1xx(临时响应)

  • 表示临时响应并需要请求者继续执行操作的状态码。

    • 100(继续) 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
    • 101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功)

  • 表示成功处理了请求的状态码。

    • 200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。如果是对您的 robots.txt文件显示此状态码,则表示 Googlebot 已成功检索到该文件。
    • 201(已创建) 请求成功并且服务器创建了新的资源。
    • 202(已接受) 服务器已接受请求,但尚未处理。
    • 203(非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
    • 204(无内容) 服务器成功处理了请求,但没有返回任何内容。
    • 205(重置内容) 服务器成功处理了请求,但没有返回任何内容。与 204响应不同,此响应要求请求者重置文档视图(例如,清除表单内容以输入新内容)。
    • 206(部分内容) 服务器成功处理了部分 GET 请求。

3xx (重定向)

  • 要完成请求,需要进一步操作。通常,这些状态码用来重定向。
  • Google 建议您在每次请求中使用重定向不要超过 5次。
  • 您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。
  • 诊断下的网络抓取页列出了由于重定向错误导致Googlebot 无法抓取的网址。

    • 300(多种选择) 针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent)选择一项操作,或提供操作列表供请求者选择。
    • 301(永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD请求的响应)时,会自动将请求者转到新位置。您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。
    • 302(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。

      • 此代码与响应 GET 和HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。
    • 303(查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。对于除 HEAD之外的所有请求,服务器会自动转到其他位置。
    • 304(未修改) 自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。
    • 305(使用代理) 请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
    • 307(临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。

      • 此代码与响应 GET 和HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。

4xx(请求错误)

  • 这些状态码表示请求可能出错,妨碍了服务器的处理。

    • 400(错误请求) 服务器不理解请求的语法。
    • 401(未授权) 请求要求身份验证。对于登录后请求的网页,服务器可能返回此响应。
    • 403(禁止)服务器拒绝请求。如果您在 Googlebot 尝试抓取您网站上的有效网页时看到此状态码(您可以在 Google网站管理员工具诊断下的网络抓取页面上看到此信息),可能是您的服务器或主机拒绝了 Googlebot 访问。
    • 404(未找到)服务器找不到请求的网页。

      • 例如,对于服务器上不存在的网页经常会返回此代码。如果您的网站上没有 robots.txt 文件,而您在 Google 网站管理员工具"诊断"标签的 robots.txt页上看到此状态码,则这是正确的状态码。
      • 但是,如果您有 robots.txt 文件而又看到此状态码,则说明您的 robots.txt文件可能命名错误或位于错误的位置(该文件应当位于顶级域,名为 robots.txt)。
      • 如果对于 Googlebot 抓取的网址看到此状态码(在"诊断"标签的 HTTP 错误页面上),则表示 Googlebot跟随的可能是另一个页面的无效链接(是旧链接或输入有误的链接)。
    • 405(方法禁用)禁用请求中指定的方法。
    • 406(不接受)无法使用请求的内容特性响应请求的网页。
    • 407(需要代理授权)此状态码与401(未授权)类似,但指定请求者应当授权使用代理。如果服务器返回此响应,还表示请求者应当使用代理。
    • 408(请求超时)服务器等候请求时发生超时。
    • 409(冲突)服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT请求时可能会返回此代码,以及两个请求的差异列表。
    • 410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。该代码与404(未找到)代码类似,但在资源以前存在而现在不存在的情况下,有时会用来替代 404 代码。如果资源已永久移动,您应使用 301指定资源的新位置。
    • 411(需要有效长度)服务器不接受不含有效内容长度标头字段的请求。
    • 412(未满足前提条件)服务器未满足请求者在请求中设置的其中一个前提条件。
    • 413(请求实体过大)服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
    • 414(请求的 URI 过长)请求的 URI(通常为网址)过长,服务器无法处理。
    • 415(不支持的媒体类型)请求的格式不受请求页面的支持。
    • 416(请求范围不符合要求)如果页面无法提供请求的范围,则服务器会返回此状态码。
    • 417(未满足期望值)服务器未满足"期望"请求标头字段的要求。

5xx(服务器错误)

  • 这些状态码表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

    • 500(服务器内部错误)服务器遇到错误,无法完成请求。
    • 501(尚未实施)服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
    • 502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
    • 503(服务不可用)服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
    • 504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    • 505(HTTP 版本不受支持)服务器不支持请求中所用的 HTTP 协议版本。

原文转自:http://blog.sina.com.cn/s/blog_6c4b32b001013p1t.html,仅为学习分享所用

php获取 本月 本周 或者 下月 下周的 开始时间 结束时间

<?php
$now_time = time();
$date=date("Y-m-d",$now_time);
 
function get_date($date,$t='d',$n=0)
{
    if($t=='d'){
       $firstday = date('Y-m-d 00:00:00',strtotime("$n day"));
       $lastday = date("Y-m-d 23:59:59",strtotime("$n day"));
    }elseif($t=='w'){
       if($n!=0){$date = date('Y-m-d',strtotime("$n week"));}
       $lastday = date("Y-m-d 00:00:00",strtotime("$date Sunday"));
       $firstday = date("Y-m-d 23:59:59",strtotime("$lastday -6 days"));
    }elseif($t=='m'){
       if($n!=0){$date = date('Y-m-d',strtotime("$n months"));}
       $firstday = date("Y-m-01 00:00:00",strtotime($date));
       $lastday = date("Y-m-d 23:59:59",strtotime("$firstday +1 month -1 day")); 
    }
    return array($firstday,$lastday);
}
 
$day1   = get_date($date,'d');
$day2   = get_date($date,'d',-1);
$week1 = get_date($date,'w');
$week2 = get_date($date,'w',-1);
$month1 = get_date($date,'m');
$month2 = get_date($date,'m',-1);
 
echo '<pre>';
print_r($day1);//今天
print_r($day2);//昨天
print_r($week1);//这周
print_r($week2);//上周
print_r($month1);//这月
print_r($month2);//上月
echo '</pre>';

二分法查找

仅限于正序数组

//二分查找
function bin_search($arr,$n){
  
    $start=0;
    $end=count($arr)-1;
  
    while($start<=$end){
        $mid=intval(($start+$end)/2);
  
        if($arr[$mid]==$n){
            return $mid;
        }else if($n > $arr[$mid]){
            $start=$mid+1;
        }else{
            $end=$mid-1;
        }
    }
}
  
$arr=array(3,4,5,7,9,10);
//$arr=array(23,14,10,7,5,3);
echo bin_search($arr,7);//查找7是第几个成员

百钱买百鸡算法

公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡,请用伪代码写出求公鸡,母鸡和小鸡的数目

//$x公鸡数量;$y母鸡数量;$z小鸡数量
for($x=1;$x<30;$x++){
 
    for($y=1;$y<20;$y++){
 
        $z=(100 - 3*$x - 5*$y) * 3;
 
        if($x + $y + $z == 100){
            echo $x .':'. $y .':'. $z .'<br>';
        }
    }
}
 
4:12:84
11:8:81
18:4:78

冒泡排序法

//冒泡排序法
//外层n-1,内层n-$i-1
function mySort($arr){
 
    $n=count($arr);
    for($i=0;$i<$n-1;$i++){
 
        for($j=0;$j<$n-1-$i;$j++){
 
            if($arr[$j]['score']>$arr[$j+1]['score']){
                $temp=$arr[$j];
                $arr[$j]=$arr[$j+1];
                $arr[$j+1]=$temp;
            }
        }
    }
    return $arr;
}

Linux破解密码

  • 开机按e
    弹出列表中的三个选择项
  • 选中第二个,按e
    在显示的命令行后,输入 空格+single
  • 再按esc返回到列表
    按b重启
  • su root
    切换到root
  • passwd
    输入新密码和重复输入新密码