我试图在Linux环境中返回文件夹的内容。
为此,我运行以下代码:

//this line returns folders and files from current folder
$reg = shell_exec ("ls -A");
//in this line I just try to show the info with the desired structure.
$reg = "stat --printf='%n|%s|%s|%F|%y|%a' ".$reg." | numfmt --to=iec-i --field=2 --delimiter='|' --suffix=B";
//This prints the content of $reg
echo $reg;
//I manually input the string returned by $reg and I receive the correct output
echo shell_exec ("stat --printf='%n|%s|%s|%F|%y|%a' .file1 file2 | numfmt --to=iec-i --field=2 --delimiter='|' --suffix=B");
//This just prints the result of "stat --printf='%n|%s|%s|%F|%y|%a' .file1"
echo shell_exec ($reg);

问题是,最后两个“echo”指令返回不同的输出(理论上)相同的输入。
我该怎么解决?

最佳答案

ls检测到它被管道传输到另一个命令时,它会每行写入一个文件,从而破坏您的命令。
你可以用空格代替它们

$reg= str_replace("\n", " ", shell_exec("ls -A"));

或用ls代替
$reg = "stat --printf='%n|%s|%s|%F|%y|%a' $(ls -A) | numfmt --to=iec-i --field=2 --delimiter='|' --suffix=B";

关于php - Shell_exec提供具有相同输入的不同输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49340210/

10-08 20:59