php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.06.2008, 16:39  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard system() flush und Safari

Hallo zusammen,

über System() lasse ich mit einer PHP Datei mehrere Datein komprimieren. Das sieht so aus:

PHP-Code:
system('tar -zcvf archiv.tar.gz '.$sDateien); 
nach jeder komprimierten Datei beginnt die Ausgabe von system() mit einer neuen Zeile. Laut manual wird damit gleichzeitig ein flush ausgeführt:

Zitat:
The system() call also tries to automatically flush the web server's output buffer after each line of output if PHP is running as a server module.
Im Firefox bekomme ich somit auch schön nach jeder komprimierten Datei die Ausgabe:

dateiname1.extension
dateiname2.extension
...

Wenn ich ein paar 100 Dateien komprimieren lasse ist das ganz geschickt für den Verlauf. Leider funktioniert es im Safari nicht. Er gibt erst nach Ablauf des Scriptes alles auf einmal aus.

Ich habe gelesen, dass Safari eine mindestanzahl an Bytes braucht um den flush zu akzeptieren, aber in dem Fall habe ich ja keinen Einfluss drauf. Habt ihr einen Tip?
webbi ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.06.2008, 16:54  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Man sollte im Manual auch weiterlesen...

Zitat:
Wird ein system()-Funktionsaufruf durchgeführt, versucht die Funktion automatisch, nach jeder Ausgabezeile den Ausgabepuffer zu flushen, sofern PHP als Servermodul läuft.

Wenn Sie einen Befehl ausführen wollen und die erzeugten Daten ohne Behinderung direkt zurückgeben wollen, verwenden Sie stattdessen die Funktion passthru().
cycap ist offline   Mit Zitat antworten
Alt 27.06.2008, 11:35  
Erfahrener Benutzer
 
Registriert seit: 09.03.2005
Beiträge: 219
webbi
Standard

Danke für den Tip, habe es mit der Funktion ausprobiert und einfach system durch passthru() ersetzt.

Allerdings löst es mein Problem in Safari nicht. Die Ausgabe erfolgt unverändert erst nachdem das Script beendet ist.

Die Ausgabe von system() nach "nach jeder Ausgabezeile einen flush) ist schon so für mich in Ordnung, die Ausgabe muss nicht direkt gesendet werden, wie es passthu() macht, 1x pro Zeile genügt.

In anderen Browsern funktioniert es ja bereits so wie gewünscht...
Das Problem ist, dass Safari eine Mindestanzahl an gesendeten Daten braucht, dass es nach dem Flush etwas ausgibt. Und die "Ausgabe pro Zeile" von System reicht für diese Mindestmenge nicht aus. Ich müsste einen Weg finden an die Ausgabe von system() noch einen langen Leerstring dranzuhängen.

Klar kann man die Ausgabe auch in eine Variable schreiben lassen, aber das geschieht ja auch erst am Ende...
webbi ist offline   Mit Zitat antworten
Alt 27.06.2008, 11:40  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

vielleicht hilft dir das:

Zitat:
shell_exec — Execute command via shell and return the complete output as a string
cycap ist offline   Mit Zitat antworten
Alt 03.07.2008, 22:54  
Erfahrener Benutzer
 
Benutzerbild von GelaMu
 
Registriert seit: 05.03.2006
Beiträge: 183
GelaMu
Standard

Zitat:
Ich habe gelesen, dass Safari eine mindestanzahl an Bytes braucht um den flush zu akzeptieren, aber in dem Fall habe ich ja keinen Einfluss drauf.
Ich habe das Problem auch mit KDE's Konqueror, während z.B. in Firefox sofort geflusht wird.
Auch wenn du die Ausgabe mit shell_exec() oder $ausgabe=`befehl`; abfängst und danach manuel ausgibst, hilft dir das nicht.

Grüße,
GelaMu
GelaMu ist offline   Mit Zitat antworten
Alt 07.07.2008, 20:50  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Es ist schlicht und einfach Sache des Browsers, was er mit ungültigem HTML macht.

Und so lange die Seite nicht komplett übertragen ist, ist sie ja ungültig, weil sie keinen kompletten Body enthält.

Manche sind da halt tolerant und fangen schon an zu rendern, manche eben nicht.

Da würde ich mir keine großen Hoffnungen machen, dem Browser was anderes beizubringen.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline   Mit Zitat antworten
Alt 07.07.2008, 21:30  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Das sehe ich genauso. Also das wird wohl kaum was bringen. Ich würde dann eher darauf setzen per Ajax ein Skript aufzurufen das eine Datei packt und eine Ausgabe zurück gibt. Und dann wird die nächste Datei gepackt. Benötigt dann allerdings JS.
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HelpDesk System phpbeginner Trash 1 01.01.2008 14:39
JavaScript: Safari Browser: Problems SvenLittkowski HTML, Usability und Barrierefreiheit 11 14.09.2007 13:13
ComputerVerwaltung / System / Ereignisanzeige dh1sbg PHP-Fortgeschrittene 3 17.11.2006 01:42
Voting System PHP Tipps 2006 8 23.01.2006 21:26
Plug-In System duderino PHP Tipps 2007 11 14.11.2005 17:58
Hilfe System für Bürobetrieb erstellen PHP Tipps 2005-2 4 13.09.2005 00:56
[Erledigt] 29.07.05: System Administrator Appreciation Day!! Off-Topic Diskussionen 2 25.07.2005 09:15
Auf welchen System funktioniert ftp_rawlist Schaelle PHP Tipps 2005-2 0 30.06.2005 19:43
Chat System Chat System Beitragsarchiv 3 21.06.2005 17:07
faq -system von phpbb nachbauen elconde PHP Tipps 2005 5 11.03.2005 14:22
flush() Problem Alpha Centauri PHP Tipps 2005 5 14.02.2005 10:11
Template System tutorial PHP Tipps 2005 3 09.02.2005 19:49
Welches Template System? zwelch PHP Tipps 2004-2 1 18.11.2004 09:04
Probleme mit system() PHP Tipps 2004 2 21.06.2004 13:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php system flush, php passthru flush, php flush safari, php flush, php system()-funktionsaufruf, php datei flush, safari flush, php flush output, php safari ausgabepuffer, php safari flush, safari über php starten, php passthru with flush, php system ausgabe zeilen, zeilenweise ausgabe php flush, php system byte per byte, system output ruchtig puffern php, safari php starten, php exec flush, php flush complete, php exec flush ajax

Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.