通过exec上传文件,挂起脚本

时间:2010-01-24 06:07:00

标签: php upload exec

基本上简单来说,我使用exec()来运行WinSCP,这会导致脚本保持到文件上传为止。是否有任何方式使脚本继续,上传在后台运行?

在Win7上运行PHP 5.3.1。

3 个答案:

答案 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