将 shell 输出保存到变量
Save shell output to variable
我正在尝试使用 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
,我认为我的命令有问题
编辑
感谢艾伦巴特勒
在这种情况下 $image_path
实际上是一个 POST 变量而 $filename
是 I4tWX0HI.jpg
错误:gm mogrify: Unable to open file (I4tWX0HI.jpg)
错误非常明显,因为 I4tWX0HI.jpg
不存在 yet.That ,我如何修改命令以使其将内容放入变量而不是尝试打开文件
此致
根据gm mogrify 手册,如果用新图像覆盖原始文件,所以您不能在命令行上指定目标图像。
您可以尝试以下选项之一:
1) 希望如果从STDIN 准备好mogrify,它会输出到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);
我正在尝试使用 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
,我认为我的命令有问题
编辑
感谢艾伦巴特勒
在这种情况下 $image_path
实际上是一个 POST 变量而 $filename
是 I4tWX0HI.jpg
错误:gm mogrify: Unable to open file (I4tWX0HI.jpg)
错误非常明显,因为 I4tWX0HI.jpg
不存在 yet.That ,我如何修改命令以使其将内容放入变量而不是尝试打开文件
此致
根据gm mogrify 手册,如果用新图像覆盖原始文件,所以您不能在命令行上指定目标图像。
您可以尝试以下选项之一:
1) 希望如果从STDIN 准备好mogrify,它会输出到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);