将shell输出保存到变量

时间:2016-06-07 17:40:00

标签: php shell shell-exec

我正在尝试使用mogrify(GraphicsMagicks)压缩jpg,我需要将结果存储在变量中。

$compressed_jpg_content = shell_exec("gm mogrify -quality 85 - < ".escapeshellarg($image_path)." $filename.jpg");
    if (!$compressed_jpg_content) {
        throw new Exception("Conversion to compressed JPG failed");
    }

然而它不起作用,我得到Conversion to compressed JPG failed,我认为我的命令有问题

修改

感谢 Allen Butler

在这种情况下,$image_path实际上是一个POST变量而$filenameI4tWX0HI.jpg

错误:gm mogrify: Unable to open file (I4tWX0HI.jpg)

错误非常明显,因为I4tWX0HI.jpg尚不存在。话虽如此,如何修改命令使其将内容放入变量而不是尝试打开文件

此致

1 个答案:

答案 0 :(得分:2)

根据gm mogrify手册,如果用新图像覆盖原始文件,则无法在命令行上指定目标图像。

您可以尝试以下选项之一:

1)希望如果从STDIN mogrify ready,它将输出到STDOUT。无法测试它,所以它是一个客人。在这种情况下,您会注意到您跳过了输出文件:

$compressed_jpg_content = shell_exec("gm mogrify -quality 85 - < ".escapeshellarg($image_path));

b)让mogrify更改图像(忽略您拥有的文件名),然后读取图像数据:

$compressed_jpg_content = shell_exec("gm mogrify -quality 85 ".escapeshellarg($image_path)." && cat ".escapeshellarg($image_path));

c)如果您不想更改原始文件,请在以下位置复制:

$tmpfile = tempnam(sys_get_temp_dir(), "image_");
copy($image, $tmpfile);
shell_exec("gm mogrify -quality 85 ".escapeshellarg(tmpfile));
$compressed_jpg_content = file_get_contents($tmpfile);
unlink($tmpfile);