2016-06-15 1 views
0

pngquant a l'exemple suivant pour phpau lieu de chemin dans la coquille

// '-' 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)); 

Je veux remplacer $path_of_file avec le contenu réel.

Cela évitera de perdre E/S lors de la conversion d'un fichier d'un format à .png, puis optimiser

Quelle sera la nouvelle commande shell_exec() dans cette situation

+0

Avez ma réponse à trier votre problème? Si c'est le cas, veuillez envisager de l'accepter comme réponse - en cliquant sur la coche/coche verte en regard du nombre de votes. Si non, veuillez dire ce qui n'a pas fonctionné pour que moi ou quelqu'un d'autre puisse vous aider davantage. Merci. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

Répondre

0

Je ne suis pas expert en PHP, mais je crois que vous cherchez un tuyau bidirectionnel (écrire et lire) à un autre processus, de sorte que vous pouvez écrire des données à son stdin et lire les données de son stdout. Donc, je pense que cela signifie que vous avez besoin de proc_open() qui est décrit here.

Il ressemblera à quelque chose comme ça (non testé):

$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); 
}