0

呼び出しを使用して、Oracle DB からデータをフェッチする PHP モジュールがあります。 oci_Execute(statement);

現在、ユーザーが提供する検索パラメーターに基づいて、検索に 30 分以上かかる場合があります。このような場合、(PHP レベルで) 検索をキャンセルし、ユーザーに検索パラメーターを再検討するよう通知します。

ファイルにPHPタイムアウト変数max_execution_timeを設定して、それを試みました。私はApacheファイルにリダイレクトphp.iniを設定しました(そして、見つからないphpページでうまく動作します)。ただし、php がタイムアウトし、oci_execute がまだ処理中の場合、PHP は致命的な例外をスローしてクラッシュします。ErrorDocument 404httpd.conf

私はすでに try/catch を試しましたが、致命的なエラーには機能しないことがわかりました。経由でシャットダウン機能を登録しようとしregister_shutdown_functionましたが、致命的なエラーの後に到達することはありません。Apache のタイムアウト ディレクティブを設定しようとしましたが、PHP スクリプトが存在する場合は効果がありません。

ApacheまたはPHPのいずれかがエラーコードで応答し、「親愛なるユーザーは検索パラメーターを再検討してください」というページにリダイレクトする必要があります:)現時点では、oci_Execute行でタイムアウトが生成された後、致命的な例外が発生します。

質問を言い換えます。致命的な例外なしで呼び出しを終了するにはどうすればよいですかoci_execute。致命的な例外以外は機能します。

4

1 に答える 1

0

Oracle データベース レベルでは、プロファイルを変更してリソース制限を設定できます。リソース制限に達したときに、Oracle からの「エラー」をトラップできるはずです。

プロファイルの変更: http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_2008.htm#SQLRF00813

于 2012-09-06T13:14:18.667 に答える