PHP:获取optipng的输出

Wer*_*ner 7 php

我正在使用jpegoptim和optipng来优化浏览器中调用的php脚本中的图像.我这样做:

$s = exec('/myoptimizer/jpegoptim -m60 -o --strip-all /httpd/images/myimage.jpg');
print $s;
Run Code Online (Sandbox Code Playgroud)

这工作正常,输出:

/httpd/images/myimage.jpg 600x90 24bit P JFIF [OK] 14572 --> 14542 bytes (0.21%), optimized. 
Run Code Online (Sandbox Code Playgroud)

现在和optipng一样:

$s = exec('/myoptimizer/optipng -o7 -preserve -strip all /httpd/images/myimage.png /httpd/images/myimage.png', $aOutput, $ret);

var_dump($s);
var_dump($a);
var_dump($ret);

But:
$s is empty.
$a is empty array.
$ret is 0.
Run Code Online (Sandbox Code Playgroud)

在控制台上执行相同的命令,我得到:

** Processing: /httpd/images/myimage.png
60x18 pixels, 4x8 bits/pixel, RGB+alpha
Input IDAT size = 2235 bytes
Input file size = 2292 bytes

Trying:
  zc = 9  zm = 9  zs = 0  f = 5         IDAT size = 2235
  zc = 9  zm = 8  zs = 0  f = 5         IDAT size = 2235
  zc = 8  zm = 9  zs = 0  f = 5         IDAT size = 2235
  zc = 8  zm = 8  zs = 0  f = 5         IDAT size = 2235

/httpd/images/myimage.png is already optimized.
Run Code Online (Sandbox Code Playgroud)

和:

$s = exec('/myoptimizer/optipng -h', $aOutput, $ret);
print $s;
Run Code Online (Sandbox Code Playgroud)

作品.

如何在PHP中获得输出?我也尝试过shell_exec,passthru和system,但是:根本没有输出.

StR*_*StR 2

该方法的第二个参数exec()捕获执行命令的标准输出。在您的情况下, optipng 不会将其结果输出到标准输出,而是输出到标准错误。您可以通过添加到执行程序的末尾来将 std 错误消息重定向到 std 输出2>&1,在这种情况下,您的代码将如下所示:

<?php
$imagePath = '/httpd/images/myimage.png';
$comand    = '/myoptimizer/optipng -o7 -preserve -strip all';

exec("$command $imagePath 2>&1", $outout);

var_dump($output);
Run Code Online (Sandbox Code Playgroud)