関数の実行に時間がかかりすぎるのを防ぐにはどうすればよいですか? 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();
を実現できます。原理は、関数の実行前にクロック信号を設定することです。関数の実行が指定された時間を超えると、シグナルがトリガーされます。処理関数が外部コードによって例外をスローします。これにより、元の関数の実行が中断され、次のコードが実行されます。関数が指定された時間内にある場合、クロック信号はトリガーされず、関数の終了後にクロック信号はクリアされ、例外はスローされません。