2011-11-10 56 views
1

我想每天運行一個腳本,它將從數據庫中選擇數據,遍歷結果併爲每行結果執行另一個腳本。然後第二個腳本將運行更多查詢並從數據創建XML文件。有時候可能是大量的數據。PHP正在運行Cronjob和腳本 - 超時/內存查詢

//RUN SCRIPT DAILY TO GET ALL CATEGORY AND PRODUCT XML FOR STORES 
set_time_limit(0);  
$select= "SELECT * FROM bookstores" ; 
$run = mysql_query($select); 
while($row = mysql_fetch_array($run)){ 
    //run 2nd script here but how? 
} 

我有兩個問題:

1)什麼是while循環執行第二個腳本的最佳方式?在第二行設置腳本再次運行之前是否必須完成第一行的第二個腳本,或者它們是否都會同時運行?

2)當我運行第二個腳本,它適用於大多數,除非有太多的結果,在這種情況下,我得到了以下錯誤:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /var/www/web/classes/class.Products.inc.php on line 90

將從運行或該停止腳本1將它移到下一行並重新執行腳本?注意我在兩個腳本中都使用了set_time_limit()函數。

非常感謝任何幫助和建議如何最好地實現這一點,而不會崩潰!

+0

只是一個想法,但也許如果你還包括你的第二個腳本的代碼,人們也許可以通過指出任何優化來幫助你,如果可能的話。 –

回答

1

如果您正在獲取內存大小錯誤,請使用以下命令。

ini_set("memory_limit","256M"); 

//您可以根據您的服務器RAM大小增加內存限制。

建議:用限制

  1. 使用SELECT查詢。例如。對於每1000或5000個限制,請使用睡眠命令。

我希望如此,以上都會對您有所幫助。

+0

謝謝,但我真的需要得到所有的結果,除了增加內存限制之外,沒有其他方法可以做到這一點嗎?它在500mb的alreay。任何人都可以幫助第一點?我仍然不知道如何正確執行第二個腳本... – LeeTee

+0

如果您無法增加內存限制,則獲取書店的記錄並將其保存爲CSV格式。然後使用CSV文件運行第二個腳本。 – Raja

+0

好的謝謝,但我仍然如何從第一次運行第二個腳本?我使用cURL還是什麼? – LeeTee