簡體   English   中英

php Exec超時

[英]Php Exec timeout

我有以下exec()命令,結尾帶有&符號,因此腳本在后台運行。 但是,該腳本未在后台運行。 恰好在5.6分鍾后,它在瀏覽器中超時。 另外,如果我關閉瀏覽器,腳本將無法繼續運行。

 exec("/usr/local/bin/php -q /home/user/somefile.php &")

如果我通過命令行運行腳本,它不會超時。 我的問題是如何防止超時。 我如何使用exec在后台運行腳本,所以它不依賴於瀏覽器。 我在做什么錯了,應該怎么看。

exec()函數處理已執行程序的輸出,因此建議您將輸出重定向到/dev/null (虛擬可寫文件,該文件會自動丟失所有寫入的數據)。

嘗試運行:

exec("/usr/local/bin/php -q /home/gooffers/somefile.php > /dev/null 2>&1 &");

注意: 2>&1將錯誤輸出重定向到標准輸出,而> /dev/null將標准輸出重定向到該虛擬文件。

如果仍然有困難,可以創建一個僅執行其他腳本的腳本。 exec()在執行任務時遵循流程,但是在任務完成時釋放。 如果執行的腳本僅執行另一個腳本,則任務非常快速,並且exec的釋放方式相同。

讓我們來看一個實現。 創建一個包含以下內容的exec.php

<?php

  if (count($argv) == 1)
  {
    die('You must give a script to exec...');
  }
  array_shift($argv);
  $cmd = '/usr/local/bin/php -q';
  foreach ($argv as $arg)
  {
     $cmd .= " " . escapeshellarg($arg);
  }
  exec("{$cmd} > /dev/null 2>&1 &");

?>

現在,運行以下命令:

exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php > /dev/null 2>&1 &");

如果有參數,也可以給它們:

exec("/usr/local/bin/php -q exec.php /home/gooffers/somefile.php x y z > /dev/null 2>&1 &");

您將需要使用shell_exec()代替:

shell_exec("/usr/local/bin/php -q /home/gooffers/somefile.php &");

話雖如此,如果您具有外殼訪問權限,為什么不將其安裝為cronjob? 我不確定為什么PHP腳本會調用另一個腳本來像這樣運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM