php 计划任务 curl,通过Task Scheduler定时运行调用cURL的PHP脚本 | 学步园
PHP本身沒有定時(shí)自動(dòng)執(zhí)行的功能,也不支持多線程。但是結(jié)合Task Scheduler和cURL,就可以彌補(bǔ)PHP的上述兩個(gè)缺陷,同時(shí)還可以脫離Apache服務(wù)器環(huán)境,在任意路徑下運(yùn)行PHP腳本。
知識(shí)準(zhǔn)備
調(diào)用cURL多程序抓取網(wǎng)頁的PHP腳本
batch.php
$urls = array(
'http://www.baidu.com',
'http://www.csdn.net',
'http://www.google.com.hk'
);
// 初始化多線程
$mh = curl_multi_init();
// 向多線程中添加每個(gè)單獨(dú)的cURL
$conn = array();
foreach ($urls as $key => $url) {
$conn[$key]= curl_init($url);
curl_setopt($conn[$key],CURLOPT_HEADER, 0);
curl_setopt($conn[$key],CURLOPT_RETURNTRANSFER, 0);
curl_multi_add_handle($mh,$conn[$key]);
}
// 執(zhí)行cURL多線程
do {
$mrc= curl_multi_exec($mh, $active);
}
while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK){
if(curl_multi_select($mh) != -1) {
do{
$mrc= curl_multi_exec($mh, $active);
}
while($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
// 釋放多線程中的每個(gè)cURL線程
foreach ($urls as $key => $url) {
curl_error($conn[$key]);
curl_multi_remove_handle($mh,$conn[$key]);
curl_close($conn[$key]);
}
// 關(guān)閉多線程
curl_multi_close($mh);
?>
需要說明的是,cURL在PHP中的多線程處理其實(shí)并不是真正的多線程,而是用單線程批處理模擬的多線程效果。
設(shè)置環(huán)境變量
為了方便調(diào)用php.exe,需要在環(huán)境變量的系統(tǒng)變量Path中添加php.exe所在目錄的路徑,如下圖所示:
設(shè)置Windows Task Scheduler
Windows 7環(huán)境下,啟動(dòng)Task Scheduler(任務(wù)計(jì)劃程序)的方式有兩種,分別是:
1.??????控制面板→管理工具→任務(wù)計(jì)劃程序;
2.??????開始→運(yùn)行→輸入“任務(wù)計(jì)劃程序”或者“scheduled task”,回車。
設(shè)置計(jì)劃任務(wù)來自動(dòng)調(diào)用PHP腳本的步驟如下:
1.??????點(diǎn)擊“創(chuàng)建基本任務(wù)”,進(jìn)入導(dǎo)航
2.??????第一步,輸入計(jì)劃任務(wù)的名稱和描述
3.??????設(shè)置任務(wù)開始的時(shí)間
4.??????設(shè)置任務(wù)執(zhí)行的具體操作
前述調(diào)用cURL的PHP腳本放在E盤根目錄下,脫離了Apache服務(wù)器環(huán)境。
此處填寫的程序(或腳本)和參數(shù)需要再命令行下測試通過方才有效。
5.??????完成后打開屬性對(duì)話框,在“觸發(fā)器”中點(diǎn)擊“編輯”,設(shè)置自動(dòng)重復(fù)執(zhí)行的間隔
以上就是設(shè)置任務(wù)計(jì)劃程序的過程,之后每隔5分鐘會(huì)彈出一個(gè)php.exe的DOS窗口,則設(shè)置成功。
總結(jié)
以上是生活随笔為你收集整理的php 计划任务 curl,通过Task Scheduler定时运行调用cURL的PHP脚本 | 学步园的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中strtotime的意思,php
- 下一篇: cpp加密php,常用的数据加密规则算法