在我开发的软件中,用户可以发送一个XLS文件,PHP使用该文件将行插入数据库。通常一个文件有1500行,在数据库中产生7000行。这个过程通常需要5到7分钟才能完成。
过了一段时间,我收到一个504网关超时错误。我做了一项研究,发现解决方案是增加最大执行时间。我试过了,但什么都没有,就像配置被忽略了一样。
max_execution_time = 600
max_input_time = 600
然后我尝试使用函数ignore_user_abort
和set_time_limit
直接在PHP上设置它。同样,它没有起作用。
set_time_limit(0); //never time out
ignore_user_abort(true); //ignore abort
在这之后,我放弃了,并决定制作一个自定义错误页面来解释错误发生的原因,然后重定向回控制面板。所以,我去了我的.htaccess,它有以下内容:
# Turn on the RewriteEngine
RewriteEngine On
Options +FollowSymLinks +Includes
Options -Indexes
IndexIgnore */*
# Rules
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index.php|images|robots.txt)
RewriteRule . index.php?/$0 [L]
并添加了以下声明:
ErrorDocument 504 http://domain/erros/timeout/
当错误再次发生时,它不会重定向到URL,而是显示默认的错误页面。
更新
我使用dreamhost共享主机。
根据文档,这应该不是问题http://wiki.dreamhost.com/Creating_custom_error_pages
我认为你需要使用像这样的本地路径
ErrorDocument 504 /cgi-bin/error.php?code=504