2012-08-24 165 views
1

如何執行另一個php腳本?如何執行另一個php腳本?

我想從我的PHP文件執行3個PHP腳本,而無需等待3個腳本完成。換句話說,3個php文件需要一次執行(並行),而不是一個一個執行(sequentiell)。

這3個腳本與我的主要php文件(腳本)在同一個文件夾中。

+0

可能的重複:http://stackoverflow.com/questions/8073109/request-a-php-script-from-another-script-and-move-on?rq=1 – Jocelyn

回答

2

如果你不想等待他們完成,要麼與

exec('php script.php &> /dev/null &'); 
shell_exec('php script.php &> /dev/null &'); 
system('php script.php &> /dev/null &'); 
`php script.php &> /dev/null &` 

那些任何運行它們應該完成作業,取決於你的PHP的配置。雖然它們是不同的函數,但它們的行爲應該是類似的,因爲所有輸出都被重定向到/ dev/null,並且立即分離該進程。

我在客戶端啓動bash SMS發送腳本的生產環境中使用第一個解決方案,該腳本最多可能需要10分鐘才能完成,但它從未失敗。在

更多信息:http://php.net/exec·http://php.net/shell_exec·http://php.net/system

+0

PHP警告:exec()無法在第3行分叉[php file.php] ...... – faressoft

+0

@faressoft我的示例的每一行都按預期工作,只是嘗試過它們,您的服務器設置有問題,現在與這裏的問題和答案無關。 – Mario

0

怎麼樣使用exec("php yourscript.php")

不考慮使用排隊系統來存儲你的PHP腳本的名稱和工人來從隊列中的數據和例如做執行beanstalkd

+2

這將等待腳本完成在開始下一個之前。 –

+0

PHP警告:exec()無法在第3行分叉[php file.php] ...... – faressoft

+0

@Kolink更新了答案..使用隊列存儲並使用其他worker工作。這是做這件事的好方法。 – amitchhajer

0

你需要運行它們沾邊的工作,這是不是真的很容易 - 或便攜。通常的解決方案是使用nohup或使用stdout和stderr將腳本重定向到/ dev/null(或Windows中的NUL),但這通常會遇到問題。

如果可能,請將三個腳本作爲腳本在Web服務器上使用,並通過異步 cURL函數訪問它們。這也有能夠通過瀏覽器測試腳本併爲您提供腳本輸出的優勢。

其他方式包括使用popen(),或者如果在Linux下,使用atbatch實用程序。

0

http://board.phpbuilder.com/showthread.php?10351142-How-can-I-exec%28%29-in-a-non-blocking-fashion採取:

爲了執行命令必須具有同時運行時,它不掛你的PHP腳本,你必須運行不輸出回PHP程序。爲此,將stdout和stderr重定向到/ dev/null,然後將其背景化。

> /dev/null 2>&1 & 

爲了執行命令,並把它催生了關閉另一個過程,是不依賴於Apache的線程上繼續運行(如果有人取消頁面不會死)運行以下命令:

exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"'); 

對於Windows http://www.php.net/manual/en/function.exec.php

function execInBackground($path, $exe, $args = "") { 
global $conf; 

if (file_exists($path . $exe)) { 
    chdir($path); 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
     pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r")); 
    } else { 
     exec("./" . $exe . " " . escapeshellarg($args) . " > /dev/null &"); 
    } 
} 
0

對於shell_exec,添加'/ B'參數,這允許您一次運行多個可執行文件。 看到我對此問題的回答:PHP on a windows machine; Start process in background

這是一樣的。

shell_exec('start/B「C:\ Path \ to \ program.exe」);/B參數是這裏的關鍵 。我試圖再次找到你的話題,但我似乎無法再 找到它。這對我有用。

我希望這能爲您解決問題。

相關問題