PHP如何為函數執行設定超時

2020-07-16 10:05:47
如何防止一個函數執行時間過長呢?在PHP裡可以用pcntl時鐘信號+異常來實現。

程式碼如下:

<?php
declare(ticks = 1);
function a()
{
    sleep(10);
    echo "a finishin";
}
function b()
{
    echo "Stopn";
}
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 "timeoutn";
}
b();
a();
b();

原理是在函數執行前先設定一個時鐘信號,如果函數的執行超過規定時間,信號會被觸發,信號處理常式會丟擲一個異常,被外層程式碼捕獲。這樣就跳出了原來函數的執行,接著執行下面的程式碼。如果函數在規定的時間內,時鐘信號不會觸發,在函數結束後清除時鐘信號,不會有異常丟擲。

以上就是PHP如何為函數執行設定超時的詳細內容,更多請關注TW511.COM其它相關文章!