出于好奇,这里发生了什么?
要么我真的累了,要么我能看到的唯一区别是第二个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
答案 0 :(得分:3)
错误发生在exec($command,$ouput,$ret_val);
。您错过了t
的{{1}}。 :P
你有2个选项,
使用proc_open比使用output
更好。因为您不必将exec
添加到捕获2>&1
。
您还在stderr
中使用sudo
。这意味着运行php文件的用户必须在exec
文件中。最好使用为您运行命令的root特权守护程序并为您提供输出。您需要实现进程间通信。