2011-11-10 55 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