【发布时间】:2012-09-06 11:39:29
【问题描述】:
我有一个 PHP 模块,它使用调用从 Oracle 数据库中获取数据
oci_Execute(statement);
现在根据用户提供的搜索参数,搜索有时可能需要超过 30 分钟。在这种情况下,我想取消搜索(在 PHP 级别)并通知用户重新考虑搜索参数。
我尝试通过在 php.ini 文件中设置 PHP 超时变量 max_execution_time 来实现这一点。我已经在 apache httpd.conf 文件中设置了一个 ErrorDocument 404 重定向(并且它适用于未找到的 php 页面)。但是,当 php 超时并且 oci_execute 仍在处理时,PHP 会抛出致命异常并崩溃。
我已经尝试过 try/catch 并且知道它不适用于致命错误。
我曾尝试通过register_shutdown_function 注册关闭功能,但在发生致命错误后永远无法到达。
我曾尝试设置 apache 超时指令,但它们在 PHP 脚本存在的情况下永远不会生效。
我希望 apache 或 PHP 以错误代码响应并重定向到一个页面,上面写着“亲爱的用户请重新考虑您的搜索参数”:) 目前我在 oci_Execute 行生成超时后看到一个致命异常。
重新表述问题;我怎样才能在没有致命异常的情况下退出 oci_execute 调用,除了致命异常之外的任何方法都可以。
【问题讨论】:
-
因为默认行为是引发致命错误,您可能可以先运行一个查询(当然只在一个列上使用 count() 以快速运行),该查询计算该搜索的记录,例如,如果超过 1000 条记录,您警告用户,否则您授权用户运行他的“大搜索”
标签: php oracle apache timeout fatal-error