2011-12-09 212 views
1

我有一個腳本,我們稱之爲linkchecker,它通過大約10.000個URL循環,檢查它們是否有http狀態碼。 當它們被選中時,這個url被標記爲在我的數據庫中被選中。 它不會輸出任何東西,直到完成,這可能需要幾個小時。如何在後臺運行php腳本?

所以我想到只是讓另一個腳本能夠在後臺運行鏈接檢查器,同時不斷地在數據庫中查詢有多少網址被檢查,所以我可以跟蹤進度,並且如果有任何網址給出長時間的問題連接時間等。

我試着在iframe中運行linkchecker,但是直到linkchecker完成後纔會加載任何東西。

當主腳本正常運行,執行其他任務時,如何在後臺執行此鏈接檢查器?

+0

叉呢?檢查Googleón如何使用它。 – bvd

+0

嗯。在這裏,Cronjobs想到了。在iframe中運行腳本時,max_execution_time最終會阻礙你。 –

回答

2

你必須設置一個cron作業(如果你運行的是Linux),其執行捲曲命令來訪問PHP腳本(外部,比如「捲曲http://domain.com/php/something.php」),或者只是執行PHP命令指向內部文件。

您可以製作一個調度程序,該調度程序每分鐘執行一次(這是cron作業支持的最小執行時間)並執行工作的「塊」。當然,你必須設置PHP跳過默認使用的30秒執行限制。

0

在數據庫中創建一個名爲「Checked」的列。只需在數據庫中進行PHP腳本更新即可。使用phpMyAdmin以圖形方式查看數據庫,只需在列「Checked」後面選擇排序,然後您就可以看到它到底有多遠。

您必須這樣做,因爲網頁在腳本完成之前不會更新。但是,您可以讓腳本運行另一個腳本來說明流程有多遠,但這可能會耗費太多時間?

您還必須進入php.ini來檢查max_execution_time是否設置爲幾個小時。 60 * 60 * 24 = 1天= 86 400秒。

希望這會有所幫助! :)

0

我建議做一個AJAX請求到新的頁面中,您把它ajaxChecker.php

在的Thuis頁它只是看看有沒有被選中的網址(回數) 如果未經檢查的數量則爲零呼應在新的div

function checker() 
{ 
    $.post('ajaxChecker.php',function(data){ 
    if(data.length > 0) 
    $('#result').html(data); 
    }); 
} 

setInterval("checker()", 10000); 

過程和輸出使通過Ajax或cron作業請求啓動第一