嗨,我有一个sed命令,我需要从一个php文件运行,该命令在shell运行得很好,但从PHP给出apache错误说问题是分号,我试图逃避它们所有,我也尝试过逃避卷曲的brakets,然后apache没有错误,但命令没有按预期执行,这是命令
$cmd = "sed -n -i '/ENDSNUMB/{x;d;};1h;1!{x;p;};${x;p;}' ./taggedfiles/$tagfile";
shell_exec($cmd);
答案 0 :(得分:2)
在双引号中,PHP尝试将内联变量解析为字符串。您的$
就是问题所在。
尝试使用单引号并转义字符串中的引号,如下所示:
$cmd = 'sed -n -i \'/ENDSNUMB/{x;d;};1h;1!{x;p;};${x;p;}\' ./taggedfiles/' . $tagfile;
shell_exec($cmd);
尽管将变量解析为shell代码时要非常小心。如果没有正确地逃避它,您可能容易受到Command Injection攻击。
答案 1 :(得分:1)
您可以使用escapeshellcmd
为所有替换值执行此操作...
从手册 - http://php.net/manual/en/function.escapeshellcmd.php
<?php
// We allow arbitrary number of arguments intentionally here.
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
shell_exec($escaped_command);
?>