Фоновая загрузка в PHP - PullRequest
3 голосов
/ 25 мая 2010

Я работаю с формой, которая позволяет загружать файлы через локальную папку и FTP. Поэтому я хочу переместить файлы через FTP (который уже работает)

Из-за соображений производительности я выбрал этот процесс для запуска в фоновом режиме, поэтому я использую nfcftpput (linux)

В CLI отлично работает следующая команда: ncftpput-b-u name -p пароль -P 1980 127.0.0.1 / upload / /home/Downloads/upload.zip

(зная, что b-параметр запускает фоновый процесс) Но если я запускаю его через PHP, он не работает (без параметра -b он работает)

PHP код:

$cmd = "ncftpput -b -u name -p password -P 1980 127.0.0.1 /upload/ /home/Downloads/upload.zip";
$return = exec($cmd);

Ответы [ 4 ]

1 голос
/ 25 мая 2010

Попробуйте выполнить одно из следующих действий:

1) Используйте команду $ cmd = "ncftpput -b -u name -p пароль -P 1980 127.0.0.1 / upload / /home/Downloads/upload.zip& ";(Обратите внимание на &)

2) Попробуйте функцию proc_open в php http://php.net/manual/en/function.proc-open.php

0 голосов
/ 31 мая 2010

Лучшим рабочим решением для меня является следующий код:

function executeBackgroundProces($command) {

    $command = $command . ' > /dev/null 2>&1 & echo $!';
    exec ( $command, $op );
    $pid = ( int ) $op [0];
    if ($pid != "")
        return $pid;

    return false;
}

Я запускаю команду: "ls bashfile" Файл bash содержит команды, такие как загрузка и удаление оригинальных файлов, разделенных; Это прекрасно работает у меня

0 голосов
/ 25 мая 2010

Взгляните на pcntl_fork . Это примечание пользователя содержит информацию о том, как правильно создавать фоновый процесс. Обратите внимание, что расширение, обеспечивающее эту функцию, может не активироваться при установке PHP.

0 голосов
/ 25 мая 2010

Попробуйте добавить '&' в конце команды, это разветвляется на уровне Linux. Также попробуйте shell_exec (), если предыдущий не будет работать.

...