ホームページ  >  記事  >  バックエンド開発  >  phpは関数の最大実行時間を設定します

phpは関数の最大実行時間を設定します

高洛峰
高洛峰オリジナル
2016-11-28 16:34:511092ブラウズ

関数の実行に時間がかかりすぎるのを防ぐにはどうすればよいですか? PHP では、pcntl クロック信号 + 例外を使用して

declare(ticks = 1);
function a()
{
    sleep(10);
    echo "a finishi\n";
}
function b()
{
    echo "Stop\n";
}
function c()
{
    usleep(100000);
}
 
function sig()
{
    throw new Exception;
}
 
try
{
    pcntl_alarm(1);
    pcntl_signal(SIGALRM, "sig");
    a();
    pcntl_alarm(0);
}
catch(Exception $e)
{
    echo "timeout\n";
}
 
b();
a();
b();

を実現できます。原理は、関数の実行前にクロック信号を設定することです。関数の実行が指定された時間を超えると、シグナルがトリガーされます。処理関数が外部コードによって例外をスローします。これにより、元の関数の実行が中断され、次のコードが実行されます。関数が指定された時間内にある場合、クロック信号はトリガーされず、関数の終了後にクロック信号はクリアされ、例外はスローされません。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。