我需要两次使用单引号 - 如何逃避?

时间:2012-08-07 06:12:35

标签: php escaping

我想在php中运行它,但它因为引号而无效....

    $cmd="sudo -u postgres sh -c 'psql -c \"alter user edumate with encrypted password \'BLAH_BLAH\';\" template1 2>&1' ";
    $shellOutput = exec($cmd, $output);

psql -c "alter user edumate with encrypted password 'BLAH_BLAH';" template1 2>&1在以postgres用户身份运行时执行正常。

我试过但它对我不起作用。

sudo -u postgres sh -c 'psql -c \"alter user edumate with encrypted password \'BLAH_BLAH\';\" template1 2>&1'
sudo -u postgres sh -c 'psql -c "alter user edumate with encrypted password \'BLAH_BLAH\';" template1 2>&1'

如何逃避$ cmd以便我可以执行它?

更新我

    $subcommand="alter user edumate with encrypted password 'BLAH_BLAH';";
    $sub = escapeshellarg($subcommand);
    $cmd="sudo -u postgres sh -c 'psql -c \"".$sub."\" template1 2>&1'";
    $shellOutput = exec($cmd, $output);
    echo "<pre>Output = " . print_r($output,1) . "</pre>";

返回

Output = Array
(
)

更新II

感谢@Hawili的工作代码。我想知道如何使用sh -c'命令'来运行,他省略了。

$shellOutput=`sudo -u postgres psql -c "alter user edumate with encrypted password 'BLAH_BLAH';" template1 2>&1`;

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

你可以使用php使用的back quote来直接执行shell命令

例如:

$output = `ls -l`;

在你的情况下它可以是这样的:

$shellOutput=`sudo -u postgres psql -c "alter user edumate with encrypted password 'BLAH_BLAH';" template1 2>&1`;