Mit PHP eine Datei ausführen und Ausgabe verarbeiten

Di, 16.06.2009 - 19:34 -- admin

PHP bietet einige Funktionen an um Dateien auszuführen. Das Problem von z.B System() und exec() ist allerdings, dass nicht der komplette Text zurückgegeben wird. Hier ist proc_open() wesentlich genauer. Wird zum Beispiel unter Linux eine Datei ausgeführt die nicht vorhanden und nicht die benötigte Berechtigungen besitzt, werden die entsprechenden Fehlermeldungen nur über proc_open() "ausgegeben".
Ich habe die Funktion std auf php.net gefunden, ist aber mittlerweile aus den Kommentaren rausgeruscht, deswegen hier der die Funktion.

function std($cmd) {
            $back="";
            $io = array();
            $p = proc_open($cmd,
                           array(1 => array('pipe', 'w'),
                                 2 => array('pipe', 'w')),
                           $io);
 
            /* Read output sent to stdout. */
            while (!feof($io[1])) {
                $back .= htmlspecialchars(fgets($io[1]),
                                                        ENT_COMPAT, 'UTF-8');
            }
            /* Read output sent to stderr. */
            while (!feof($io[2])) {
                $back .= htmlspecialchars(fgets($io[2]),
                                                        ENT_COMPAT, 'UTF-8');
            }
 
            fclose($io[1]);
            fclose($io[2]);
            proc_close($p);
            return $back;
}