什么是这个php exec()的字符串与变量结果解释?

时间:2011-12-30 20:02:32

标签: php linux exec

出于好奇,这里发生了什么?

要么我真的累了,要么我能看到的唯一区别是第二个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 个答案:

答案 0 :(得分:3)

错误发生在exec($command,$ouput,$ret_val);。您错过了t的{​​{1}}。 :P

你有2个选项,

  1. 使用proc_open比使用output更好。因为您不必将exec添加到捕获2>&1

  2. 您还在stderr中使用sudo。这意味着运行php文件的用户必须在exec文件中。最好使用为您运行命令的root特权守护程序并为您提供输出。您需要实现进程间通信。