Win2k, Kommandozeilen-Scripte und kontinuierliche Echo-Ausgabe
Horst Nogajski
- php
0 Eternius0 Horst Nogajski0 Stefan
Hallo zusammen,
ich würde gerne einige PHP-Scripte per Kommandozeile auf meinem Rechner laufen lassen und eine kontinuierliche Informationsausgabe erhalten.
Die Scripte laufen und erfüllen Ihre Aufgaben, aber ich bekomme immer nur blockweise Informationen ausgegeben.
So wie es scheint werden die Ausgabenm erst gepuffert und dann zusammen ausgegeben, aber nicht nur erst am Ende eines Scriptes sondern sehr wahrscheinlich immer wenn der/ein Puffer? voll ist.
Auf dem Rechner läuft Windows 2000 und PHP 4.3.4.
Die Scripte werden mit diesem Befehl aufgerufen:
php.exe -q -c C:\Pfadzur\lokalenphpini\ -f script_dateiname.php
Ich vermute das das weniger mit PHP als vielmehr mit Windos oder der Windowskonsole zu tun hat.
Irgendwelche Ideen?
Viele Grüße,
Horst
So wie es scheint werden die Ausgabenm erst gepuffert und dann zusammen ausgegeben, aber nicht nur erst am Ende eines Scriptes sondern sehr wahrscheinlich immer wenn der/ein Puffer? voll ist.
genau dem nagel auf den kopf getroffen
Ich vermute das das weniger mit PHP als vielmehr mit Windos oder der Windowskonsole zu tun hat.
falsch, es ist PHP sache, du musst das STDOUT handle hot machen (also ungebuffert)
Hallo,
genau dem nagel auf den kopf getroffen
Danke, *g*
falsch, es ist PHP sache, du musst das STDOUT handle hot machen (also ungebuffert)
weitergehende Hinweise sind willkommen.
Gruß,
Horst
Moin,
weitergehende Hinweise sind willkommen.
Na wenn Du hier http://www.php-homepage.de/manual/features.commandline.php nichts findest ;-)
Stefan
Hallo,
Na wenn Du hier http://www.php-homepage.de/manual/features.commandline.php nichts findest ;-)
Was bitte schön soll das sein?
[ ] A) Ein Beweis dafür das _Du_ das Posting nicht richtig gelesen hast?
[ ] B) Ein Witz dessen tieferen Sinn ich nicht erfassen konnte?
[ ] C) Sonstiges?
Mein Vermerk 'weitergehende Hinweise sind willkommen' bezieht sich ja wohl ausdrücklich auf: 'du musst das STDOUT handle hot machen (also ungebuffert)'.
Deshalb verstehe ich nicht was dieser so unmotiviert dahingeschluderte Link aufs PHP-Manual soll?
Falls Du die Seite zu den Kommandozeilen-Scripten schon mal gelesen hast kannst Du mir ja sicherlich zeigen wo denn dort steht wie man einen kontinuierlichen (ungepufferten) Output erzeugt?
Gruß,
Horst
PS: Ich bekomme weder mit der Verwendung der .../cli/php.exe noch mit Verwendung der normalen php.exe und entsprechenden Parametern in der php.ini das erwünschte Resultat. (implicit_flush, etc)
Hallo Horst,
Na wenn Du hier http://www.php-homepage.de/manual/features.commandline.php nichts findest ;-)
Was bitte schön soll das sein?
[ ] A) Ein Beweis dafür das _Du_ das Posting nicht richtig gelesen hast?
[ ] B) Ein Witz dessen tieferen Sinn ich nicht erfassen konnte?
[ ] C) Sonstiges?
[x] C) Sonstiges?
Mein Vermerk 'weitergehende Hinweise sind willkommen' bezieht sich ja wohl ausdrücklich auf: 'du musst das STDOUT handle hot machen (also ungebuffert)'.
Deshalb verstehe ich nicht was dieser so unmotiviert dahingeschluderte Link aufs PHP-Manual soll?
Hast Du die Seite durchgelesen, auf die sorgfältig verwiesen wird? Es handelt sich um einen korrekten Link :)
Ich habe es für Dich getan, und habe den zweiten Eintrag von Tabelle 23-1 gefunden, der in sich schon interessant für Dich ist und darüber hinaus weitere interessante Links enthält, denen Du offensichtlich nicht gefolgt bist.
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz,
[x] C) Sonstiges?
Na, wird wohl so sein.
Hast Du die Seite durchgelesen, auf die sorgfältig verwiesen wird?
Na logo.
Ich habe es für Dich getan, und habe den zweiten Eintrag von Tabelle 23-1 gefunden, der in sich schon interessant für Dich ist und darüber hinaus weitere interessante Links enthält, denen Du offensichtlich nicht gefolgt bist.
Das sagst Du jetzt so.
Ich hatte es im vorigen Posting, (auf das Du dich ja beziehst), auch schon geschrieben: implicit_flush() (= der 2. Eintrag in Tabelle 23.1, den Du freundlicherweise für mich gelesen hast) steht bei mir in der php.ini auf on, oder es ist sowieso standardmäßig immer auf on mit der Verwendung der cli/php.exe.
Trotzdem wird der Output im Konsolenfenster immer gepuffert, auch wenn ich im Script die Funktion flush() verwende wird es gepuffert. Das hatte ich wohl auch schon gesagt im Ausgangsposting.
Ich habe manchmal den Eindruck das (auch manchmal) Antworten mehr mit dem Ziel, den Oberlehrer zu spielen, gegeben werden als der Absicht einem Fragesteller zu helfen. Und wenn dann noch nicht mal die Postings auf die geantwortet wird richtig gelesen wurden dann sind solche Antworten in meinen Augen 100% unnütz.
Viele Grüße,
Horst
Hallo Horst,
das Verhalten Deiner Anwendung kann ich nicht nachvollziehen,
allerdings ist meine Umgebung neuer als Deine:
PHP 4.3.5 unter Windows XP
Die Ausgabe erfolgt hier genau wie im Handbuch beschrieben.
Sogar mit der meinem PHP unbekannten Option -q, sogar mit
dem laut Handbuch überflüssigen -f.
Mein einfaches Skript sieht so aus:
<?php
$i = 0;
while($i < 20) {
echo "$i\n";
flush(); // ist bei meiner Konfiguration überflüssig
sleep(1); // damit die Ausgabe auch schön sehe
$i++;
}
?>
Hier weiss natürlich keiner, wie Dein Skript aussieht,
welche Ausgabe in welcher Art und Weise erfolgt
(außer blockweise) und wie Du sie erwartest.
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz,
mittlerweile habe ich den Fehler gefunden:
Ich hatte aus der PHP_4.3.4-Distribution die php.ini_recommended
genommen und entsprechend für die Kommandozeile angepasst, weil ich u.a. auch alle als 'deprecated' ausgezeichneten Direktiven wie z.B. 'allow_call_time_pass_reference' usw. aus meinen Scripten ausmerzen wollte.
Leider, leider stand dort im Gegensatz zur php.ini_dist die Directive output_buffering = 4096 anstatt = 'off'.
(und das habe ich übersehen, Seufz, ...)
Die Ausgabe erfolgt hier genau wie im Handbuch beschrieben.
Sogar mit der meinem PHP unbekannten Option -q, sogar mit
dem laut Handbuch überflüssigen -f.
Hier weiss natürlich keiner, wie Dein Skript aussieht,
welche Ausgabe in welcher Art und Weise erfolgt
(außer blockweise) und wie Du sie erwartest.
Es war definitiv klar das der Fehler nicht in den Scripten liegen kann, schlieslich war auch das flush() in den Scripten nicht erfolgreich, usw.
Aber Deine Bemerkung mit den zusätzlichen Startoptionen usw. hat mich dazu veranlasst die cli/php.exe auch mal _nur_ mit einem Script ohne Parameter (und ohne php.ini) aufzurufen, (was erst ging nachdem ich die php.ini für den lokalen Webserver auch aus dem Systempfad gelegt hatte).
Das war dann aber sozusagen der Durchbruch in der Fehlereingrenzung, ;-)
Vielen Dank und viele Grüße,
Horst
PS: Jetzt machen sie schöne, kontinuierliche Ausgaben, =:)
wie z.B.:
running: E:\TEMP\xcopy_merge_binlocals.phpl ...
Get Dirinfo from biko
Get Dirinfo from eminenz
[eminenz] serverfile is older: run_phpl.cmd
[eminenz] serverfile is older: php.ini
[eminenz] serverfile is older: hn_deepdir.class.php
[eminenz] serverfile is older: xcopy_merge_binlocals.phpl
Get Dirinfo from biko
Get Dirinfo from mobilist
[mobilist] clientfile is older: run_phpl.cmd
[mobilist] clientfile is older: php.ini
[mobilist] clientfile is older: hn_deepdir.class.php
[mobilist] clientfile is older: xcopy_merge_binlocals.phpl
Get Dirinfo from biko
Get Dirinfo from musicman
[musicman] no Clientfile: exifcopy.exe
[musicman] no Clientfile: exifdate.exe
[musicman] no Clientfile: exifedit.exe
[musicman] no Clientfile: exiffile.exe
[musicman] no Clientfile: exifkey.exe
[musicman] no Clientfile: exiflist.exe
[musicman] clientfile is older: run_phpl.cmd
[musicman] serverfile is older: w5sp_status.log
[musicman] clientfile is older: php.ini
[musicman] clientfile is older: hn_deepdir.class.php
[musicman] clientfile is older: xcopy_merge_binlocals.phpl
Final
[eminenz] clientfile is older: w5sp_status.log
READY
There are 904 files in C:\bin_local
Action tooks 58,705 sec
CopyList:
run_phpl.cmd : EMINENZ > BIKO
php.ini : EMINENZ > BIKO
hn_deepdir.class.php : EMINENZ > BIKO
xcopy_merge_binlocals.phpl : EMINENZ > BIKO
run_phpl.cmd : BIKO > MOBILIST
php.ini : BIKO > MOBILIST
hn_deepdir.class.php : BIKO > MOBILIST
xcopy_merge_binlocals.phpl : BIKO > MOBILIST
exifcopy.exe : BIKO > MUSICMAN
exifdate.exe : BIKO > MUSICMAN
exifedit.exe : BIKO > MUSICMAN
exiffile.exe : BIKO > MUSICMAN
exifkey.exe : BIKO > MUSICMAN
exiflist.exe : BIKO > MUSICMAN
run_phpl.cmd : BIKO > MUSICMAN
w5sp_status.log : MUSICMAN > BIKO
php.ini : BIKO > MUSICMAN
hn_deepdir.class.php : BIKO > MUSICMAN
xcopy_merge_binlocals.phpl : BIKO > MUSICMAN
w5sp_status.log : BIKO > EMINENZ
w5sp_status.log : BIKO > MOBILIST