<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');ignore_user_abort(true);
header("Content-Type: text/html;charset=utf-8");
date_default_timezone_set("PRC");class runjob
{
    static $myselftime = 50;
    static $url = "http://127.0.0.1/to.php?pwd=123456789";
    static $myself = "http://127.0.0.1/autorun.php";
    static $urltime_H = 18;
    static $urltime_i = 00;    function __construct()
    {
        if (!file_exists("runtime.txt"))
        {
            $fp = fopen("runtime.txt","w");
            fwrite($fp,"");
            fclose($fp);
        }
        if (!file_exists("time.txt"))
        {
            $fp = fopen("time.txt","w");
            fwrite($fp,"");
            fclose($fp);
        }
        if (file_exists("autorun.stop"))
            exit();
    }    function get_content($url)
    {
        $buf = parse_url($url);
        $host=$buf['host'];
        $path=$buf['path'];
        if (isset($buf['query']))
            $path .= "?" . $buf['query'];
        $header = "GET " . $path . " HTTP/1.1\r\n";
        $header .= "Host: " . $host . "\r\n";
        $header .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
        $header .= "Cache-Control: max-age=0\r\n";
        $header .= "Accept-Encoding: gzip,deflate,sdch\r\n";
        $header .= "Accept-Language: zh-CN,zh;q=0.8\r\n";
        $header .= "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36\r\n";
        $header .= "Connection: close\r\n\r\n";
        $fp = fsockopen($host, 80, $errno, $errstr, 5);
        if ($fp)
        {
            fputs($fp,$header);
            fclose($fp);
            return true;
        }
        else
        {
            return false;
        }
    }    function main()
    {
        $nowtime = $_SERVER["REQUEST_TIME"];
        $time = file_get_contents("runtime.txt");
        if ((self::$urltime_H == date("H")) && (self::$urltime_i == date("i")) && ($time != date("d")))
        {
            $this -> get_content(self::$url);
            echo '运行成功';
            $fp = fopen("runtime.txt","w");
            fwrite($fp,date("d"));
            fclose($fp);
        }        $time = file_get_contents("time.txt");
        if (($nowtime - $time) >= self::$myselftime)
        {
            sleep(self::$myselftime);
            $this -> get_content(self::$myself);
            $fp = fopen("time.txt","w");
            fwrite($fp,$nowtime);
            fclose($fp);
        }
    }}
$job = new runjob();
$job -> main();程序会自动访问自身,并在18:00的时候访问目标网址http://127.0.0.1/to.php?pwd=123456789,访问一次,但有时发现会访问多次,次数是随机的,出现这种情况的时间也是随机的URLPath函数Windows服务器

解决方案 »

  1.   

    PHP没有定时的功能吧。
    最保险的方法就是有人访问,然后触发这个“定时”。
      

  2.   

    由于$this->get_content()请求发出时,web服务器会开出新的线程去接收你的请求(访问自身或者访问你的目标url),这实际上就相当于多个并发的访问。很可能你的文件内容还没写入,新的请求就过来了,因此,if ((self::$urltime_H == date("H")) && (self::$urltime_i == date("i")) && ($time != date("d")))这个判断可能会有效多次。自然会有多次的访问。