我正在尝试在shell_exec命令中包含一个用户定义的变量(从cookie派生)来命名文件。不幸的是,当我运行PHP脚本时,文件名只是“.flv”而没有前面的变量字符串。我已经测试了cookie,它确实有效,但看起来它没有被正确传递给exec。任何帮助或建议将不胜感激。
$shellvar = $_COOKIE["VideoTitle"];
$shellvar = escapeshellarg($shellvar);
shell_exec('/usr/local/bin/ffmpeg -i audio.wav -i videofile.flv $shellvar.flv 2>&1');
答案 0 :(得分: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的用户不多)。