1

我想在 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
(
)

更新二

感谢@Hawili 提供工作代码。我想知道如果使用 sh -c 'command' 他省略了如何运行。

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

2 回答 2

2

您可以查看此功能:

http://php.net/manual/en/function.escapeshellcmd.php

于 2012-08-07T06:15:17.497 回答
1

您可以使用 php 使用的反引号 ` 将命令直接执行到 shell

前任:

$output = `ls -l`;

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

$shellOutput=`sudo -u postgres psql -c "alter user edumate with encrypted password 'BLAH_BLAH';" template1 2>&1`;
于 2012-08-07T06:20:50.653 回答