如何转义shell命令从php运行它

时间:2017-09-08 18:45:06

标签: php bash shell sed

嗨,我有一个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);

2 个答案:

答案 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);
?>