0

我试图在 shell_exec 命令中包含一个用户定义的变量(从 cookie 派生)来命名文件。不幸的是,当我运行 PHP 脚本时,文件名只是“.flv”,前面没有变量字符串。我已经测试了 cookie,它确实有效,但看起来它没有正确传递给 shall exec。任何帮助或建议将不胜感激。

$shellvar = $_COOKIE["VideoTitle"];
$shellvar = escapeshellarg($shellvar);
shell_exec('/usr/local/bin/ffmpeg -i audio.wav -i videofile.flv $shellvar.flv 2>&1');
4

1 回答 1

3

您在 PHP 中使用单引号,这意味着它不会将 $shellvar 解析为 PHP 变量。然后将其传递给终端,该终端尝试使用该变量(当时不存在)并返回一个空白变量。因此,请尝试在 shell_exec 命令中将单引号替换为双引号。

所以代码看起来像:

$shellvar = $_COOKIE["VideoTitle"];
$shellvar = escapeshellarg($shellvar);
shell_exec("/usr/local/bin/ffmpeg -i audio.wav -i videofile.flv $shellvar.flv 2>&1");

强制性安全警告:
另外,我恳请您小心,escapeshellarg 是一个很好的命令,但我还建议(除此之外)只允许带有 preg_match 的字母和数字(因为我很偏执)。

就像是

if (preg_replace('/[A-Za-z0-9]*/', '', $shellvar) != "")
    echo "DISALLOWED CHARACTERS";

这样,您至少可以确定您不允许将格式错误的名称传递给终端。我还建议以特定用户的身份运行命令(访问权限很少,不比使用 ffmpeg 多)。

于 2012-05-28T18:26:48.920 回答