Команда PHP exec split на сервере Linux - PullRequest
0 голосов
/ 22 октября 2011

У меня есть сервер Linux под управлением Ubuntu 10.10 Maverick с установленными apache и php, в каталоге / var / www у меня есть каталог для загрузки.Я использовал менеджер OSFile и изменил, чтобы включить функцию разделения файлов, вот код:

function spl($fname){
 global $folder;
 if (!$fname == ""){
    maintop("Split");
    $dirfile = $folder.$fname;

    \\escape directory path
    $dirfile = str_replace(" ","\ ",$dirfile);
    $dirfile = str_replace("(","\(",$dirfile);
    $dirfile = str_replace(")","\)",$dirfile);
    $command = "split -d -b1024m ".$dirfile." ".$fname."_";
    echo "Command: ".$command;
    echo"<br />";


    $returnval =0;
    unset($output2);
    $output = exec($command,$output2,$returnval);

    //echo results
    echo($output);
    echo"<br />";
    print_r($output2);
    echo"<br />";
    echo($returnval);
    echo"<br />";
    mainbottom();
 }
  else
    home();
}

Команда не выполняется.Файл и каталог верны, но он возвращает код выхода 1 и Array () в качестве выходных значений. Я создал группу, включающую несколько пользователей, я сделал эту группу владельцем загрузок / и дал ей чтение, запись и выполнение.разрешения, эта группа включает в себя www-данные.

Любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 22 октября 2011

Если вы не получаете никаких сообщений об ошибках от exec и error.log остается пустым, то используйте эту оболочку для выполнения:

 exec("sh -c \" $cmd 2>&1 \"");

2>&1 перенаправляет канал stderr на stdout, чтобы он отображался в массиве результатов.
Что в оболочке означает «2> & 1»?

Другой вариант будет proc_open, где вы можете читать каждый канал отдельно, но больше работы по настройке.

0 голосов
/ 22 октября 2011
...