我很好奇,这是怎么回事?
要么我真的很累,要么我能看到的唯一区别是第二个执行使用了一个字符串,而前一个使用了同一个字符串的变量。
//代码 $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
错误在exec($command,$ouput,$ret_val);
。你漏掉了output
中的t
。: P
你有两个选择,
-
使用proc_open优于
exec
。因为你不需要添加那些2>&1
来捕获stderr
。 -
您还在
exec
中使用sudo
。这意味着如果运行php文件的用户必须在/etc/sudoers
文件中。最好使用具有root权限的守护进程为您运行命令并提供输出。您需要实现进程间通信。