我有一个每天运行一次的PHP脚本,运行需要30分钟(我认为)。那里的一切都是安全的。安全操作。大约10~15分钟后我一直收到500错误。但是我在日志等中看不到任何东西所以我有点困惑。
到目前为止,我设置为“无限制”的是:
同样将这些设置为此部分(运行脚本的文件夹)的数字非常高的数字
此脚本的性质是SOAP类型API,它从第三方URL导入数千行数据,将它们放入本地MySQL表中,然后下载附加了每行的图像,因此数据量很重要。
我正在试图找出其他PHP变量等我为什么要通过整个事情来完成这个。我设置的其他PHP变种:
答案 0 :(得分:3)
尝试使用PHP命令行界面(php-cli)执行冗长的任务。除非您设置/终止它,否则命令行中的执行时间是无穷大。您也可以通过cron job设置计划。
答案 1 :(得分:3)
使用PHP从命令行运行它(例如php yourscript.php
),不应发生此错误。使用set_time_limit(0)
也不是一个好主意;你最多应该使用set_time_limit(86400)
。您可以设置一个cron作业,每天执行一次。只需确保脚本中的所有文件路径都是绝对的,而不是相对的,这样就不会混淆。
编译脚本也可能有所帮助。 HipHop是一个很棒的PHP编译器,然后你的脚本运行得更快,使用更少的内存,并且可以使用尽可能多的资源。 HipHop很难安装。
答案 2 :(得分:3)
有三次超时:
在你的情况下,似乎Apache达到了超时。在这种情况下,最好使用PHP CLI。但如果你真的需要实时做这个操作。然后,您可以使用Gearman通过它来实现PHP中的真正并行性。
如果您需要从普通HTTP请求(Browser-> Apache)触发脚本的简单解决方案,您可以从PHP运行后端脚本(CLI脚本)作为shell命令,但是“异步”。更多信息可以在Asynchronous shell exec in PHP
中找到答案 3 :(得分:0)
如果执行时间有问题,那么可能应该在脚本中使用set_time_limit函数设置max_execution时间:
set_time_limit(0);
我也会直接使用php在命令行上调用脚本,而不是通过apache。此外,打印出一些状态消息,并将它们输送到日志中。
我怀疑你的实际问题是脚本会在线路上的某些地方阻塞坏数据。