2012-03-18 7 views
7

私はPHPスクリプトを持っています。完了には少なくとも1000秒の実行時間が必要です。PHPスクリプトがエラーなしでタイムアウトする前に終了します

毎回約265秒後にエラーなしで終了します。私はループを使用しているので、繰り返しの回数をテストしたが、それは独立しており、ループ内にエラーが発生する可能性はさらに排除されている。

php.iniでmax_execution_timeを10800に設定しましたが、memory_limitを変更しても結果には影響しません。

助けてください!私は頭を徹底的に傷つけました!

+1

あなたのコードは何をしていますか?何もエラーがスローされないのですか?エラー表示をE_ALLに設定しましたか? '@ '演算子でエラーを抑制していませんか? –

+0

もちろん、エラーは発生しません。ログファイルを調べましたか? – Neysor

+1

これをコマンドライン、cronジョブ、Webサーバー、その他から実行していますか?別の呼び出し方法を試してみましたか? – dldnh

答えて

0

ログファイルを確認しましたか?エラー6またはセグメント化エラーが発生した場合。その後、あなたのスクリプトは実際にブラウザにエラーを表示せずにphpをクラッシュさせています(ブラウザであれcliであれ)。

UNIX上でApacheを使用している場合、このログインは/var/log/apache2/error.logにあるはずです。

そうしないと、この行を追加することにより、.htaccessにログファイルのパスを定義することができます。

php_value error_log "/path/to/somewhere/convenient/php_errors.log" 

変更にパスをあなたのhttpdが書き込み権限を持っているとあなたが許可を読んだところ、どこかに。

+1

新しいエラーログは空白になりました... – 7HUND3RX

+0

ええええええええええええええええええええええええええええええええええええサーバーのログファイルではありません。 PHPはすでにクラッシュしています。あなたはApacheのエラーログを調べてみましたか?どのHTTPサーバーを使用していますか? –

+1

私が与えられたPleskにサーバログファイルが許可されていませんでした。ホスティングプロバイダは、1つのスクリプトで使用できる最大リソースの制限が原因であることを確認しました。 お時間をいただきありがとうございました! – 7HUND3RX

0

ギブ:スクリプトの先頭で

set_time_limit(0); 

。コードの実行が完了しない限りタイムアウトしないようにします。

+0

私は彼がすでにタイムアウトを排除したと言ったと思います。 –

+0

助けてくれない..それは10800sのすべての時間を実行することは決してありません。 – 7HUND3RX

+0

@AshishAgrawalは問題のコードを示します。 – mithunsatheesh

0

この同じエラーが私に起こりました。私のPHP関数のうちの1つが、stderr、stdout、その他のログファイルにエラーなしで送られました。

私は、自分のプログラムの操作の半分にメモリ制限を512MBに設定していた他の開発者が書いたヘルパーPHPスクリプトを使用していました。サブモジュールは、スクリプトの処理の途中でエラーログ設定をサイレントに設定することで、井戸を汚染しました。

ループの繰り返しごとにPHPスクリプトで使用可能なPHPシステム設定を出力することで、これが起こっているかどうかを証明できます。下付き文字が汚い行為をしたとき、PHPエンジンは、ガベージコレクタが将来のランダムなポイントで実行された後、エラーを発生させずにすぐに終了します。これは、ガベージコレクタがその作業をしているときに、サブモジュールがシステム設定を混乱させるときに、PHPガベージコレクタのバグです。

解決策:ガベージコレクタが動作しているので、phpヘルパーサブモジュールを編集して、システム設定を微調整しないようにしてください。 PHPインタプリタは、PHPシステム変数の中毒後、ランダムな間隔でエラーや出力なしにフリークアウトして死んでしまいます。 PHPで

0

display_errorserror_reportingが適切に表示された場合でもログからエラーを非表示にする唯一の方法は、例えばError Control Operators

を使用することです:次のコードは、致命的なエラーが発生しますが、「隠されました」 1つは、ログやブラウザに表示されません。

@echo "forgetting the last quote; 

ので(違いをhere参照)上にはdisplay_errors値と、使用しているPHPのバージョンによってはerror_reportingを設定し、あなたのコードに「@」記号を使用しているかどうかを確認します。