PHP脚本很长的潜在问题

时间:2011-11-10 09:59:45

标签: mysql post soap php

我有一个每天运行一次的PHP脚本,运行需要30分钟(我认为)。那里的一切都是安全的。安全操作。大约10~15分钟后我一直收到500错误。但是我在日志等中看不到任何东西所以我有点困惑。

到目前为止,我设置为“无限制”的是:

  • 的max_execution_time
  • max_input_time设置
  • default_socket_timeout

同样将这些设置为此部分(运行脚本的文件夹)的数字非常高的数字

  • memory_limit的
  • 的post_max_size

此脚本的性质是SOAP类型API,它从第三方URL导入数千行数据,将它们放入本地MySQL表中,然后下载附加了每行的图像,因此数据量很重要。

我正在试图找出其他PHP变量等我为什么要通过整个事情来完成这个。我设置的其他PHP变种:

  • display_errors = On
  • log_errors = On
  • error_reporting = E_ALL& ~E_NOTICE& 〜E_WARNING
  • error_log =“error_log”

4 个答案:

答案 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)

有三次超时:

  1. PHP等级:set_time_limit
  2. Apache等级:Timeout
  3. Mysql级别:Mysql Options
  4. 在你的情况下,似乎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。此外,打印出一些状态消息,并将它们输送到日志中。

我怀疑你的实际问题是脚本会在线路上的某些地方阻塞坏数据。