基本上简单来说,我使用exec()来运行WinSCP,这会导致脚本保持到文件上传为止。是否有任何方式使脚本继续,上传在后台运行?
在Win7上运行PHP 5.3.1。
答案 0 :(得分:1)
$pipe = popen("/bin/bash ./some_shell_script.sh argument_1","r");
在Linux和Windows下均可使用。
(只是不要关闭管道,不要试图从中读取)
您的PHP脚本将继续运行,同时在后台通过popen运行生成进程。当您的脚本到达文件末尾或调用die()时,它将等待另一个进程完成并关闭管道,然后再完全退出。
答案 1 :(得分: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。
答案 2 :(得分:0)
PHP不是作为单独的线程运行的,因此apache必须等待它来完成exec。在这种情况下,您的脚本可能会在exec调用期间遇到时间和内存限制,这会使其成为用户执行的最佳解决方案。一般不推荐。
为什么不将PHP函数用于ftp? http://www.php.net/manual/en/function.ftp-get.php