PHP:Backtick无法使用命令
我有一个PHP脚本,通过在Bash中使用backtick操作符执行命令,从文件中检索200行。下面是代码的样子:PHP:Backtick无法使用命令,php,bash,Php,Bash,我有一个PHP脚本,通过在Bash中使用backtick操作符执行命令,从文件中检索200行。下面是代码的样子: $endline = `(shell execution that returns a number here)`; $line = $endline - "200"; $lines = "sed -n '".$line.", ".$endline." p' log.txt"; echo $lines; $file = `$lines`; echo $file; 此代码返回$li
$endline = `(shell execution that returns a number here)`;
$line = $endline - "200";
$lines = "sed -n '".$line.", ".$endline." p' log.txt";
echo $lines;
$file = `$lines`;
echo $file;
此代码返回$lines
作为sed-n'18002000p'log.txt
,但$file
不返回任何结果。在Bash终端中直接使用sed-n'18002000p'log.txt时,我得到了预期的结果
这里有什么地方做得不对?是否必须转义“
字符
编辑:shell脚本在数字后添加了一个空格,因此误读了它。我猜它是
$eof
,或者您的路径(log.txt
)不合适
我复制并粘贴了您的代码,并对其进行了以下调整:
;
添加到echo$行中
)$eof
更改为$endline
(如果$eof
有效,则可能不需要更改)log.txt
是有效路径(这很可能是您的错误)它可以在Bash中工作而不能在PHP中工作的原因是它们的“工作目录”不一定相同。您没有执行command@ColeJohnson反勾号不算作执行命令?是的,正在执行shell命令。或者更确切地说,如果允许使用shell命令(不在安全模式下,并且未禁用shell_exec),代码至少是正确的所以,作为一个健全的检查,你能做
echo`tail log.txt`
?是的,这是一堆我在发布这篇文章时忘记的垃圾,真正的代码与此不同。我已经做了ls-al
等来确认文件目录。你确定你有权限运行shell命令吗?你能做echo`pwd`
?我有权限,我有权限'我已经启动了进程,并用倒勾列出了目录内容。注意:修复了原始post.fwiw中的语法错误,我可以一字不差地复制/粘贴您的代码(只需将log.txt更改为已知的良好路径,行数也一样),它在OS X 10.6.7上的PHP5.3.4上运行良好