Что это за строка в php exec () и объяснение результата переменной? - PullRequest
1 голос
/ 31 декабря 2011

Из любопытства, что здесь происходит?

Либо я очень устал, либо я вижу только одно отличие: во втором exec используется строка, а в предыдущем - переменная той же строки.

// код

    $command = "sudo /bin/mount /dev/sdd1 /a 2>&1";
    echo "[mountDev] command=$command\n";
    exec($command,$ouput,$ret_val);
    debugArr("mountDev",$output,$ret_val);

    $new_command="sudo /bin/mount /dev/sdd1 /a 2>&1";
    echo "[mountDev] comman2=$new_command\n";
    exec("sudo /bin/mount /dev/sdd1 /a 2>&1",$output,$ret_val); 
    // error handling
    debugArr("mountDe2",$output,$ret_val);

// выход

[mountDev] device=/dev/sdd1
[mountDev] command=sudo /bin/mount /dev/sdd1 /a 2>&1
[mountDev] output=
[mountDev] retval=32
[mountDev] comman2=sudo /bin/mount /dev/sdd1 /a 2>&1
[mountDe2] output=Array
(
    [0] => mount: you must specify the filesystem type
)
[mountDe2] retval=32

1 Ответ

3 голосов
/ 31 декабря 2011

Ошибка в exec($command,$ouput,$ret_val);.Вы пропустили t из output.: P

У вас есть 2 варианта,

  1. Лучше использовать proc_open , чем exec.Потому что вам не нужно добавлять эти 2>&1, чтобы захватить stderr.

  2. Также вы используете sudo в exec.Это означает, что пользователь, который запускает ваш php-файл, должен находиться в файле /etc/sudoers.Лучше использовать привилегированного корневого демона, который запускает команды для вас и выдает результат.Вам необходимо реализовать межпроцессное взаимодействие.

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