将文件从命令行传递到 PHP stdin

Passing a file from command line to PHP stdin

我在 PHP 中使用名为 Intervention 的图像处理库。这是一个很棒的库,但并不完全具备我需要的所有功能,特别是无损压缩。有命令行工具可以执行此操作,但我想即时进行处理并将数据传递给浏览器,而不是将数据写入文件系统。

我想将文件数据提取到一个文件中,然后直接提供给 PHP,但我对命令行不够熟悉,不知道如何 "pipe"数据到 PHP 或如何获取 PHP 以读取数据。也许是这样的:

use Intervention\Image\ImageManagerStatic as Image;

$data = exec('optipng image.png >tophp');

$image_data = fopen('php://stdin', 'r');

$img = Image::make($image_data);

//...do more stuff...

echo $img->response();

我知道这显然行不通,但是有什么方法可以完成我想做的事情吗?

对于任何能够将图像数据 return 输出到标准输出的命令行工具,您可以使用 shell_exec 捕获它。然后您可以将该数据传递给 Intervention。否则,您可以将数据保存到 tmp 文件,让 PHP 读取数据,然后删除文件。