Содержимое вместо пути в оболочке

Pngquant имеет следующий пример для php

// '-' makes it use stdout, required to save to $compressed_png_content variable
    // '<' makes it read from the given file path
    // escapeshellarg() makes this safe to use with any path
    $compressed_png_content = shell_exec("pngquant --quality=$min_quality-$max_quality - < ".escapeshellarg(    $path_to_png_file));

Я хочу заменить $path_of_file с актуальным содержанием.

Это позволит избежать бесполезной траты ввода-вывода при преобразовании файла из одного формата в png, а затем оптимизировать его

Что будет новым shell_exec() командовать в этой ситуации

1 ответ

Я не эксперт по PHP, но я считаю, что вы ищете двусторонний канал (запись и чтение) к другому процессу, чтобы вы могли записывать данные в его стандартный вывод и считывать данные из его стандартного вывода. Итак, я думаю, что это означает, что вам нужно proc_open() который описан здесь.

Это будет выглядеть примерно так (не проверено):

$cmd = 'pngquant --quality ... -';

$spec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "w"));

$process = proc_open($cmd, $spec, $pipes);

if (is_resource($process)) 
{

    // write your data to $pipes[0] so that "pngquant" gets it
    fclose($pipes[0]);

    $result=stream_get_contents($pipes[1]);
    fclose($pipes[1]);

    proc_close($process);
}
Другие вопросы по тегам