3

php5-fpm + ngnix構成でPHPでタイムアウトを処理する方法は?

だけで簡単なスクリプトを作成しようとしました

sleep(60);

php.ini

max_execution_time = 30

fast_cgi

fastcgi_connect_timeout 60;
fastcgi_send_timeout 50;
fastcgi_read_timeout 50;

スクリプトは、バックエンドのタイムアウトのために 50 秒で停止します。私は何をしなければなりませんか

  1. php.ini で max_execution_time を有効にします

  2. ini_set を有効にして、スクリプト内で直接実行時間を 0 に変更します

php 自体ではなく、fast_cgi がすべてのタイムアウトを制御できるのはなぜですか?

4

3 に答える 3

3

基本的に、Linuxではタイムアウトは実際の「php作業」のみをカウントし、すべてのストリーム関数時間ではなく、さらにそれが原因ではないためsleep、制限に達せず、fastgciタイムアウトが常に開始されました.代わりに、Windowsでは実際の「人間の」経過時間がカウントされます。

PHPドキュメントから:

set_time_limit() 関数と構成ディレクティブ max_execution_time は、スクリプト自体の実行時間にのみ影響します。system() を使用したシステム コール、ストリーム操作、データベース クエリなど、スクリプトの実行以外で発生するアクティビティに費やされた時間は、スクリプトの最大実行時間を決定する際には含まれません。これは、測定時間が実数である Windows では当てはまりません。

于 2012-05-23T12:14:24.753 に答える
0

php-cgi(php-fpm) php.iniを使用してmax_execution_timeも効果はありませんが、fpm 構成アイテムrequest_terminate_timeoutはスクリプトの実行時間を処理します。

php-fpm.conf で、この項目を次のように設定します。

request_terminate_timeout = 60s
于 2016-07-19T11:26:46.997 に答える
0

PHP コードでset_time_limitを使用してみてください。

于 2012-05-21T14:02:44.210 に答える