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


What is this php exec()'s string vs. variable result explanation?

我很好奇,这是怎么回事?

要么我真的很累,要么我能看到的唯一区别是第二个执行使用了一个字符串,而前一个使用了同一个字符串的变量。

//代码
    $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

你有两个选择,

  1. 使用proc_open优于exec。因为你不需要添加那些2>&1来捕获stderr

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