PHP脚本在Apache中超时,但在cli中不超时
我有一个PHP脚本,大约需要30秒才能完成。当通过php cli运行它时,它会成功完成(回显确认并将相关结果保存在本地文件系统上的文件中)。如果我通过Apache运行同一个文件,它似乎超时了,大约30秒后,Firefox提供给我的不是预期的确认消息,而是下载一个空文件(其他浏览器对它的处理不同,但基本上,有些事情没有按计划进行)。未创建本应在文件系统上创建的文件 知道执行时间可能很长,我在脚本的开头设置了PHP脚本在Apache中超时,但在cli中不超时,php,apache,apache2,Php,Apache,Apache2,我有一个PHP脚本,大约需要30秒才能完成。当通过php cli运行它时,它会成功完成(回显确认并将相关结果保存在本地文件系统上的文件中)。如果我通过Apache运行同一个文件,它似乎超时了,大约30秒后,Firefox提供给我的不是预期的确认消息,而是下载一个空文件(其他浏览器对它的处理不同,但基本上,有些事情没有按计划进行)。未创建本应在文件系统上创建的文件 知道执行时间可能很长,我在脚本的开头设置了set\u time\u limit(400) 有关于如何调试这个的提示吗?是什么导致脚本在
set\u time\u limit(400)
有关于如何调试这个的提示吗?是什么导致脚本在Apache中超时,而不是在cli中超时?PHP cli和通过Apache的PHP使用不同的PHP.ini文件。检查php.ini文件中的Apache版本,确认
max\u execution\u time
足够高,可以满足您的需要
您可以执行
phpinfo()
以获取当前使用的php.ini文件的位置。php CLI和通过Apache的php使用不同的php.ini文件。检查php.ini文件中的Apache版本,确认max\u execution\u time
足够高,可以满足您的需要
您可以执行
phpinfo()
以获取当前使用的php.ini文件的位置。除了cgi可以超时的php时间限制之外。
如果您在apache中使用mod_fcgid,您还需要增加在那里的时间
看一看
我认为除了cgi可以超时的php时间限制之外,还需要增加
FcgidIOTimeout 40
。
如果您在apache中使用mod_fcgid,您还需要增加在那里的时间
看一看
我认为您需要增加
FcgidIOTimeout 40
在阅读了这里的所有答案和评论之后,我相信您的脚本不会超时
我认为你的申请失败了。
apache进程在cli不支持的受限用户中运行
可能您正在将一个文件写入一个文件夹,但您无权访问(在apache用户下)
我还认为可能缺少php模块。
将cli php.ini与apache php.ini进行比较
启用错误日志记录:
error_log = /tmp/php_error.log
log_errors = 1
可能您正处于测试环境中,您还可以启用显示\u错误
。
但在生产使用中,请始终关闭此选项
请参阅日志为什么php中止
您可以使用su
命令从apache帐户中的cli运行php脚本。
这可用于检查权限。阅读此处的所有答案和评论后,我相信您的脚本不会超时 我认为你的申请失败了。 apache进程在cli不支持的受限用户中运行 可能您正在将一个文件写入一个文件夹,但您无权访问(在apache用户下) 我还认为可能缺少php模块。 将cli php.ini与apache php.ini进行比较 启用错误日志记录:
error_log = /tmp/php_error.log
log_errors = 1
可能您正处于测试环境中,您还可以启用显示\u错误
。
但在生产使用中,请始终关闭此选项
请参阅日志为什么php中止
您可以使用su
命令从apache帐户中的cli运行php脚本。
这可用于检查权限。您的宿主允许设置时间限制?当您从命令行运行脚本时,PHP从未强制执行限制。这是从命令行运行的PHP与作为(f)cgi或apache模块运行的PHP之间的(微小)区别之一。请参阅:您的服务器是否有权限写入您保存文件的特定位置。是的,我可以使用同一服务器上的其他脚本将文件写入该位置。设置时间限制是允许的,我将其设置为400,正如我在问题中提到的。php.ini中的max_execution_time设置为insane 2000,系统上只有1个php.ini文件。嘿,Salty,请给我们更新。您注意到新的答案了吗?您的宿主允许设置时间限制?当您从命令行运行脚本时,PHP从来没有强制执行限制。这是从命令行运行的PHP与作为(f)cgi或apache模块运行的PHP之间的(微小)区别之一。请参阅:您的服务器是否有权限写入您保存文件的特定位置。是的,我可以使用同一服务器上的其他脚本将文件写入该位置。设置时间限制是允许的,我将其设置为400,正如我在问题中提到的。php.ini中的max_execution_time设置为insane 2000,系统上只有1个php.ini文件。嘿,Salty,请给我们更新。您注意到新的答案了吗?系统上似乎只有一个php.ini。@SaltyNuts:请查看我更新的答案。如果找到了正确的php.ini文件,请编辑其
set_time_limit
指令,然后重新启动Web服务器,查看执行时间限制是否增加。根据您的指示,我已确认php.ini中的max_execution_time设置为2000。我假设您指的是最大执行时间而不是设置时间限制,因为设置时间限制是一个函数,而不是一个php.ini指令。系统上似乎只有一个php.ini。@SaltyNuts:请查看我更新的答案。如果找到了正确的php.ini文件,请编辑其set_time_limit
指令,然后重新启动Web服务器,查看执行时间限制是否增加。根据您的指示,我已确认php.ini中的max_execution_time设置为2000。我假设你的意思是max_execution_time,而不是set_time_limit,因为set_time_limit是一个函数,而不是php.ini指令。我似乎没有使用mod_fcgid-在文件系统的任何地方都找不到它,在任何apache配置文件中都没有提到FcgidIOTimeout。也许你正在使用mod_php。您可以在phpinfo()中看到您的网关。服务器API:CGI/FastCGI和$\u服务器[“SERV