2010-01-24 101 views
1

基本上,我使用exec()來運行WinSCP,它導致腳本一直保留到文件上傳。無論如何要讓腳本繼續,並且上傳在後臺運行?通過exec,掛起腳本上傳文件

在Win7上運行PHP 5.3.1。

+1

換句話說:你想在PHP中使用多線程?現在你知道關鍵字:http://stackoverflow.com/search?q=php+multithreading – BalusC 2010-01-24 06:11:28

+0

這不是傳統的方式多線程,即有多個程序執行線,通常互相發送消息。他只是想在後臺產生另一個程序。如果你想以這種方式調用它,這是多線程更簡單的方法。 – 2012-01-04 12:26:39

回答

0

請問這個function from the PHP Manual有幫助嗎?

function runAsynchronously($path,$arguments) { 
    $WshShell = new COM("WScript.Shell"); 
    $oShellLink = $WshShell->CreateShortcut("temp.lnk"); 
    $oShellLink->TargetPath = $path; 
    $oShellLink->Arguments = $arguments; 
    $oShellLink->WorkingDirectory = dirname($path); 
    $oShellLink->WindowStyle = 1; 
    $oShellLink->Save(); 
    $oExec = $WshShell->Run("temp.lnk", 7, false); 
    unset($WshShell,$oShellLink,$oExec); 
    unlink("temp.lnk"); 
} 

PHP on a windows machine; Start process in background then Kill process服用。

+0

這似乎沒有工作。我跑了,我已經嘗試了所有的例子以及http://www.somacon.com/p395.php – Tyler 2010-01-26 15:46:00

0

PHP不是作爲一個單獨的線程運行,所以apache必須等待它完成exec。在這種情況下,您的腳本可能會在執行調用期間遇到時間和內存限制,這對於用戶exec來說不是最佳解決方案。一般不推薦。

爲什麼不使用ftp的PHP函數?雙方在Linux和Windows http://www.php.net/manual/en/function.ftp-get.php

1
$pipe = popen("/bin/bash ./some_shell_script.sh argument_1","r"); 

作品。

(不要關閉管,也不要試圖從中讀取)

你的PHP腳本將繼續運行,而過程中,通過在後臺運行POPEN催生。當腳本到達文件結尾或調用die()時,它將等待另一個進程完成,並在完全退出之前關閉管道。