PHP脚本exec bash脚本不会打印所有bash行
我的redhat上有php脚本,我通过telnet客户端以root用户身份登录。PHP脚本exec bash脚本不会打印所有bash行,php,bash,exec,Php,Bash,Exec,我的redhat上有php脚本,我通过telnet客户端以root用户身份登录。 运行bash脚本的PHP脚本是(functions.inc): 当我这样做的时候:php functions.inc-我得到以下信息: 发生什么事了[root@Xilantest]# 为什么我看不到第一行? 谢谢 在php脚本中尝试 echo system('/ilantest/testscript.sh'); 看 命令结果的最后一行。如果您需要执行 命令,并将命令中的所有数据直接传回 在没有任何干扰的情况下,使
运行bash脚本的PHP脚本是(functions.inc): 当我这样做的时候:php functions.inc-我得到以下信息:
发生什么事了[root@Xilantest]# 为什么我看不到第一行?
谢谢 在php脚本中尝试
echo system('/ilantest/testscript.sh');
看
命令结果的最后一行。如果您需要执行
命令,并将命令中的所有数据直接传回
在没有任何干扰的情况下,使用passthru()函数。得到
执行命令的输出,确保设置并使用输出
参数
因此:
如果不指定任何参数来接收输出,则只打印最后一行。从手册: 如果存在输出参数,则指定的数组将 填充命令的每一行输出。拖尾 此数组中不包括空白,例如\n。注意,如果 数组已包含一些元素,exec()将附加到 数组的末尾。如果不希望函数附加元素, 在将数组传递给exec()之前,对数组调用unset() 您可以传递数组以接收所有行:
<?php
$lines = array();
exec('/ilantest/testscript.sh', $lines);
foreach($lines as $i) {
echo $i;
}
?>
在第一个echo语句之后,“e”在做什么?对不起,没有“e”修复Q..+当i./testscript.sh正常工作并打印2行时,这可能是原件的副本,可能另一行是原件的副本:)或者更好地使用另一个函数,该函数始终返回输出。@gaRex,当然OP希望检查脚本的返回值,并确保$output在执行内爆()之前不为空,但这一切都取决于OP如何编写shell脚本。那么使用proc_*函数堆栈可能更好。这是错误的。“输出”是每行的数组,而不是字符串。@kainjow ok…。因此使用内爆()
将数组转换为字符串。我不明白您试图反驳的是什么。请用带(!)的所有字符串确定,但重复最后一个。。。使用shell\u exec()
代替系统,不会产生副作用。
echo system('/ilantest/testscript.sh');
exec('/ilantest/testscript.sh', $output);
echo implode("\n", $output);
<?php
$lines = array();
exec('/ilantest/testscript.sh', $lines);
foreach($lines as $i) {
echo $i;
}
?>