Beste,

Ik draai php via apache op een windows pc hier thuis. Via php wil ik een extern console programma starten. Ik heb dit geprobeerd met exec, system, shell_exec en proc_open. Bij al deze methoden lukt het niet om de output van het programma uit te lezen.

Ik draai mijn php script via command, ik zie de output van het extern programma in mijn console, ik zie php zijn script afwerken en de variabel waar de output moet inzitten is leeg. Verder vraag ik nergens de output te tonen, maar toch zie ik die.

Ik heb ook al geprobeerd met Ob_start() en dergelijke, maar ik krijg deze functies nooit goed werkende.

Graag verdere hulp.


PS. het extern programma noemt mkvalidator, een console programmatje waarmee ik mkv bestanden kan controlleren.
Heeft het misschien te maken dat die commando's alleen op UNIX platforms werken en niet op Windows?

Heb je een voorbeeld code?
Een voorbeeld?

$output = exec('mkvalidator.exe');

Hoe bedoel je enkel op unix system? Ik heb exec al meerdere malen gebruikt om andere programma's uit te voeren via console en dit werkt perfect. Zolang het console programma's zijn.
Ik moet eerlijk bekennen dat het lang geleden is dat ik hier iets mee heb gedaan, maar wat ik bedoel is dat commando's zoals 'ls' e.d. niet op Windows werken. Wat voor output zou je precies willen krijgen bij het uitvoeren van mkvalidator.exe?

Op UNIX platforms geeft exec de gebruiker terug van de draaiende pid.

Zie http://php.net/manual/en/function.exec.php
Het volgende wil ik:

Wanneer ik mkvalidator.exe uitvoer in een gewone console krijg ik dit als antwoord:

>mkvalidator.exe video.mkv
0 error's ...
>mkvalidator.exe video2.mkv
10 error's ...

Nu wil ik dit programma oproepen van uit php en zijn output ook verwerken vanuit php. Als ik dit php script aanvoer ben ik niet geïnteresseerd in de uitvoer van mkvalidator.exe maar enkel in de interpretatie van php. Dit lukt mij tot nu toe niet.
Als het naar stderr geschreven wordt zul je het anders op moeten vangen. In linux is dit shell_exec('command.sh 2>&1'); zo zorg je dat stderr naar stdout wordt geschreven. In Windows heb ik geen idee omdat ik nooit ontwikkel in PHP op een Windows machine..
Probeer het volgende eens:

<?php
exec('mkvalidator.exe', $output, $return);
echo '<p>Output: ' . $output . '</p><p>Return: ' . $return . '</p>';

// en
passthru('mkvalidator.exe', $array, $output);
echo '<pre>' . var_dump($array) . '</pre><p>Output: ' . $output;
?>
Normaal kan je met proc_open zowel stderr en stdout opvragen. Echter wanneer ik het op die manier doet krijg ik het zelfde probleem als met exec en system.

Het is alsof php even stopt, het programma uitvoert in de console LOS van php en dan verder doet met het php script. Alle output of error's zijn leeg in php, het is alsof het programma gewoon geen uitvoer heeft gehad. Terwijl in een console ik de uitvoer wel zie (ook al vroeg ik dit niet).

Voorbeeld (in console):

>php test.php
script begonnen...
10 error's // dit is de output van mkvalidator, die zou hier niet mogen komen
script klaar, output van extern programma = ''
>

//Edit

Ik zal bovenstaande manier vanavond proberen als ik thuis ben, bedankt.

Reageren