set_time_limit()関数の関数は、PHPスクリプトの最大実行時間を調整して、スクリプトの長い実行時間のために過度のサーバーリソースを回避することです。基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">set_time_limit</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$seconds</span></span><span>);
</span></span>
ここで、 $秒は最大実行時間の秒数です。 0に設定すると、無制限の時間を意味します。
例えば:
<span><span><span class="hljs-title function_ invoke__">set_time_limit</span></span><span>(</span><span><span class="hljs-number">30</span></span><span>); </span><span><span class="hljs-comment">// スクリプトがせいぜい実行されます 30 2番</span></span><span>
</span></span>
デフォルトでは、PHPは通常、set_time_limit()関数が呼び出されない場合の最大実行時間として、php構成ファイルのmax_execution_time値を使用します。この値は通常、デフォルトで30秒になります。
Apacheは最も一般的に使用されるWebサーバーの1つであり、通常、PHPを持つモジュラーサーバーとして使用されます。 Apacheでは、PHPはモジュール(MOD_PHP)として実行されます。つまり、PHPスクリプトはApacheプロセスで直接実行されます。したがって、 set_time_limit()関数は、PHPスクリプトの実行に直接影響します。
デフォルトの動作:apache環境では、 set_time_limit()が現在のPHPスクリプトの最大実行時間を変更します。スクリプトの実行時間がこの制限を超えると、PHPは自動的にスクリプトを終了し、エラーを返します。
アクションの範囲: set_time_limit()は現在のPHPリクエストにのみ影響しますが、他の同時リクエストには影響しません。
Apacheでは、PHPはモジュールとして直接ロードされるため、他のサーバーの構成や設定によって乱されることなく、各PHPスクリプトの実行時間を直接制御できます。
Nginxは、通常PHP-FPM(PHP FastCGIプロセスマネージャー)で動作する軽量のWebサーバーです。 PHPは、サーバープロセスに直接埋め込まれるのではなく、Nginx環境でFastCGIプロトコルを介してNginxと通信します。したがって、NGINX環境では、PHPスクリプトの実行はPHP-FPMプロセスによって管理されます。
デフォルトの動作:nginx環境では、 set_time_limit()はApacheとは異なる動作をすることがあります。この関数は、PHP-FPMを介して実行されるため、スクリプトの最大実行時間を設定できますが、 SET_TIME_LIMIT()はMAX_EXECUTION_TIMEおよびPHP-FPM構成ファイルのRequest_Terminate_Timeoutパラメーターの影響を受ける可能性があります。これらの構成項目は、 set_time_limit()によって設定された制限時間に上書きまたは競合する場合があります。
PHP-FPM構成の影響:NGINX環境でのPHP実行時間は、PHP構成ファイルのMAX_EXECUTION_TIMEパラメーターによって制御されるだけでなく、PHP-FPM構成ファイルのRequest_Terminate_Timeout設定によっても影響を受ける可能性があります。 set_time_limit()がより長い実行時間を設定したとしても、php-fpmのrequest_terminate_timeout値が短い場合、phpスクリプトは引き続き終了する場合があります。
アクションの範囲:PHPプロセスはPHP-FPMで管理されるため、 SET_TIME_LIMIT()は現在の要求のPHP実行にのみ影響し、Nginxの他の要求には影響しません。 Apache環境と同様に、Nginxサーバーからの同時リクエストは互いに影響しません。
Apacheの構成:Apache環境では、PHPの実行時間はApacheの構成とは関係がなく、主にPhp.iniおよびset_time_limit()によって制御されます。 php.iniのmax_execution_timeがより少ない時間制限に設定されている場合、 set_time_limit()はこの制限を効果的に上書きし、スクリプトに十分な実行時間があることを確認できます。
nginx構成:nginx環境では、 set_time_limit()の効果は、php-fpm構成ファイルの関連する設定の影響を受ける可能性があります。特に、 request_terminate_timeoutおよびmax_execution_timeの設定は、PHPスクリプトの実行時間をより強力に制御できます。
Apacheであろうとnginxであろうと、 set_time_limit()関数の設定にはアプリケーションシナリオがあります。サーバーを構成する場合、開発者は実際のニーズに基づいてスクリプト実行時間を合理的に構成し、サーバーのリソースの状況とビジネスロジックと組み合わせて構成する必要があります。
Apacheチューニング:apacheでset_time_limit()を使用する場合は、 php.iniのmax_execution_timeの設定がset_time_limit()との競合を回避するのに十分な大きさであることを確認することをお勧めします。他のApacheモジュール(mod_securityやmod_rewriteなど)がPHPの実行時間に影響を与える可能性がある場合、開発者は関連する構成に特別な注意を払う必要があります。
nginxチューニング:nginxでは、特に長期にわたるスクリプトで、php-fpm( request_terminate_timeoutなど)の構成を調整することが非常に重要です。たとえば、適切なrequest_terminate_timeout値を設定して、 set_time_limit()が有効であることを確認します。
ApacheおよびNginx環境では、 Set_time_limit()の基本的な機能は同じであり、どちらもPHPスクリプトの最大実行時間を制限するために使用されます。ただし、サーバーアーキテクチャとPHP処理方法が異なるため、特定のパフォーマンスも異なります。 Apache環境では、 set_time_limit()は比較的独立しており、スクリプトの実行時間に直接影響します。 Nginx環境では、PHPはPHP-FPMを介して実行されるため、 SET_TIME_LIMIT()はPHP-FPM構成の影響を受ける可能性があり、異なる実行行動が生じます。
これらの違いを理解し、さまざまなサーバー環境に基づいて対応する構成最適化を実行することで、限られた時間内にPHPスクリプトを効率的に実行できるようになり、スクリプトの長期的な実行によってサーバーリソースの無駄を避けることができます。