Загрузка файла через exec, зависший скрипт - PullRequest
1 голос
/ 24 января 2010

По сути, в двух словах: я использую exec () для запуска WinSCP, в результате чего скрипт удерживается до загрузки файла. Есть ли способ сделать так, чтобы сценарий продолжался, а загрузка выполнялась в фоновом режиме?

Запуск PHP 5.3.1 на Win7.

Ответы [ 3 ]

1 голос
/ 12 марта 2010
$pipe = popen("/bin/bash ./some_shell_script.sh argument_1","r");

Работает как под Linux, так и под Windows.

(просто не закрывайте канал и не пытайтесь читать с него)

Ваш PHP-скрипт будет продолжать работать, пока процесс запускается в фоновом режиме. Когда ваш сценарий достигает конца файла или вызова die (), он будет ждать завершения другого процесса и закрытия канала, прежде чем завершится полностью.

0 голосов
/ 31 января 2010

PHP не предназначен для работы в качестве отдельного потока, поэтому apache должен ждать, пока он завершит exec. В этом случае ваш сценарий может столкнуться с ограничениями по времени и памяти во время вызова exec, что сделает его неоптимальным решением для exec пользователя. Как правило, не рекомендуется.

Почему бы не использовать функции PHP для ftp? http://www.php.net/manual/en/function.ftp-get.php

0 голосов
/ 24 января 2010

Поможет ли эта функция из Руководства PHP помочь?

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 на компьютере с Windows; Запустите процесс в фоновом режиме, затем убейте процесс .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...