【问题标题】:Apache-PHP max_execution_time fatal exception handlingApache-PHP max_execution_time 致命异常处理
【发布时间】: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


【解决方案1】:

在 Oracle 数据库级别,您可以通过更改配置文件来设置资源限制。当您达到资源限制时,您应该能够从 Oracle 捕获“错误”。

改变个人资料: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_2008.htm#SQLRF00813

【讨论】:

  • 谢谢 .. 如果我在 PHP 端找不到任何解决方案,我会调查它.. 因为我没有对 DB 的管理访问权限...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 2016-05-26
  • 2010-09-08
  • 2017-12-20
  • 1970-01-01
相关资源
最近更新 更多