說實話,linux 下面的crontab 任務完全可以實現所有的定時任務腳本,但是有些腳本只需要在一段時間內執行,過了這段時間之后,就不再執行定時腳本了。在使用crontab的時候,就需要人為的關閉掉這個腳本。
有沒有一種方式,利用PHP自己來執行定時腳本,而且我也可以隨時在后台關閉。
一個簡單的死循環的例子
sleep()函數;主要是讓死循環得到休息,不至於崩潰。
set_time_limit(0);設置執行最長時間,0為無限制。
ignore_user_abort(true); 關閉瀏覽器,服務器也能自動執行。
1 <?php 2 ignore_user_abort();//關閉瀏覽器仍然執行 3 set_time_limit(0);//讓程序一直執行下去 4 $interval=3;//每隔一定時間運行 5 do{ 6 $msg=date("Y-m-d H:i:s"); 7 file_put_contents("log.log",$msg,FILE_APPEND);//記錄日志 8 sleep($interval);//等待時間,進行下一次操作。 9 }while(true); 10 ?>
需要說明的是:程序沒有寫結束判斷語句,他會無限循環下去。當然如果想停止的話,可以重啟apache,重啟后就無效了。想再次進行定時執行,那么把這段代碼再一次運行。
上面簡單例子可以說明這個原理。
那么針對上面的例子,我可以進行一下改良方案。
你需要一個執行腳本的開關,你可以用外部文件引入的方法來實現,在while循環的時候,include開關變量即可。那么就可以這樣實現:
建立外部引入變量文件 switch.php 內容如下:
<?php return 1;//1執行腳本 0退出執行腳本 ?>
改良腳本如下:
1 <?php 2 ignore_user_abort();//關閉瀏覽器后,繼續執行php代碼 3 set_time_limit(0);//程序執行時間無限制 4 $sleep_time = 5;//多長時間執行一次 5 $switch = include 'switch.php'; 6 while($switch){ 7 $switch = include 'switch.php'; 8 $msg=date("Y-m-d H:i:s").$switch; 9 file_put_contents("log.log",$msg,FILE_APPEND);//記錄日志 10 sleep($sleep_time);//等待時間,進行下一次操作。 11 } 12 exit(); 13 14 ?>
通過這個,是不是可以刷完整的瀏覽量或者點贊數呢。有時刷網站的瀏覽量會有ip限制等,可以查看之前的curl的使用。http://www.cnblogs.com/xs-yqz/p/7645567.html
來自:http://www.blhere.com/966.html
