HTML-Ausgabe vor FTP-Upload mit PHP
Apfelmännchen
- php
Servus!
Mit einem lokalen PHP-Script möchte ich eine Datei auf einen Web-Server hochladen. Vor dem Upload sollte aber noch eine Meldung auf dem Bildschirm ausgegeben werden. Der User soll den Upload nicht aktiv starten müssen, aber darüber informiert werden, dass der Upload im Gange ist (der User soll nicht nur den weissen Bildschirm sehen).
Wie mache ich das?
Danke und Grüsse
Apfelmännchen
Hallo,
Mit einem lokalen PHP-Script möchte ich eine Datei auf einen Web-Server hochladen.
Bitte beschreibe das ganze etwas ausfuehrlicher.
Ueblicherweise hat man
1. Einen "Client"-Rechner.
Hier muss der Benutzer _von_Hand_ im Browser
(HTML-Formular) die Datei auswaehlen, die er
hochladen will, und dann auf "Abschicken" klicken.
Auf Client-Rechnern laeuft normalerweise
kein Webserver und kein PHP
2. Einen "Server"-Rechner - Webserver mit PHP.
Das PHP-Skript nimmt die gesendeten Daten entgegen
und speichert sie gegebenenfalls im Dateisystem
des Webservers.
Was zwischen dem Moment, wo der Benutzer auf "Absenden" klickt,
bis zu dem Moment, wo die Datei fertig an den Webserver
uebertragen ist, angezeigt wird, kann man mit PHP _nicht_
beeinflussen.
Siehe auch:
http://www.dclp-faq.de/q/q-formular-status.html
mfg, Thomas
Hoi Thomas
Auf Client-Rechnern laeuft normalerweise
kein Webserver und kein PHP
Normalerweise; in meinem Fall aber schon. Auf einem bestimmten Rechner wird ein PHP-Script ausgeführt, welches mit einer FTP-Funktion eine Datei hochlädt. Bevor das lokale PHP-Script jedoch mit dem Upload beginnt, soll es eine Ausgabe am Bildschirm erzeugen.
Grüsse Apfelmännchen
Hallo,
Danke fuer die Erklaerung.
Auf einem bestimmten Rechner wird ein PHP-Script ausgeführt, welches mit einer FTP-Funktion eine Datei hochlädt. Bevor das lokale PHP-Script jedoch mit dem Upload beginnt, soll es eine Ausgabe am Bildschirm erzeugen.
Ich nehme mal an, dass Du, um das ganze zu starten,
im Browser das Skript auf dem lokalen Server aufrufst:
http://localhost/hochladeskript.php
Das Skript kann also ein paar Zeilen PHP ausgeben,
und sie mit flush() bereits an den Browser schicken,
bevor es mit seinen FTP-Aktivitaeten startet:
echo "<DOCTYPE ...>\n";
echo "<title>Es wird hochgeladen...</title>";
echo "<p>Bitte warten - die Datei xyz.txt wird hochgeladen...</p>";
flush();
/*
FTP-Teil
if (erfolgreich)
echo"<hr><p>Upload war erfolgreich.<p><a href='index.html'>Weiter...</a>";
else
echo "<hr><p>Upload ging in die Hosen...";
*/
Probier's mal aus - sonst melde Dich wieder und poste
dann auch ein paar Zeilen relevanten Quellcode...
Gruesse,
Thomas
Hallo Thomas
Vielen Dank für deine Hilfe. Leider funktionierts aber noch nicht so ganz. Ich habe das Problem mal vereinfacht:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN">
<html>
<head>
<title>Title</title>
</head>
<body>
<?
echo "<p>Ausgabe</p>";
flush();
sleep(5);
?>
</body>
</html>
Bei mir erscheint die Ausgabe erst nach 5 Sekunden. Eigentlich müsste die Ausgabe aber sogleich angezeigt werden, oder?
Ich verwende Apache als Webserver. Funktioniert bei dir dieses Script oder siehst du meinen Fehler?
Besten Dank
Apfelmännchen
Hallo,
echo "<p>Ausgabe</p>";
flush();
sleep(5);
Bei mir erscheint die Ausgabe erst nach 5 Sekunden. Eigentlich müsste die Ausgabe aber sogleich angezeigt werden, oder?
Nach meinem Verstaendnis: ja.
flush() und das "sichtbare" Ergebnis sind AFAIK
stark vom Browser abhaengig.
Vielleicht z.T. auch vom Webserver.
Ich verwende Apache als Webserver. Funktioniert bei dir dieses Script oder siehst du meinen Fehler?
Ich habe das Skript auf einen entfernten Server
(kommerzieller Webhost) hochgeladen.
Server: Apache/1.3.29 mit PHP/4.3.4 unter Linux.
Dann habe ich es mit Mozilla 1.5 (Linux) abgerufen.
<title> und "Ausgabe" werden sofort angezeigt, dann
zeigt der Browser oben rechts (drehendes Logo) noch
waehrend ca. 5 Sekunden "Aktivitaet" an, dann ist fertig.
Wenn ich das Skript noch um ein paar Zeilen erweitere,
sehe ich die Ausgaben im 5-Sekunden-Takt:
echo "<p>Ausgabe1</p>";
flush();
sleep(5);
echo "<p>Ausgabe2</p>";
flush();
sleep(5);
echo "<p>Ausgabe3</p>";
Zu sehen (voruebergehend) hier:
http://www.tiptom.ch/tests/fremdes/flush_sleep.php
Nachdem Microsoft im Fruehjahr 2002 diverse (Schweizer)
Webserver "gescannt" hatte, indem www.example.com/Default.aspx
und andere, zufaellige "Dateien" vom Webserver verlangt wurden,
richtete ich ein kleines Beleidigungs-Skriptlein ein, das ebenfalls
sleep() und flush() verwendet:
http://www.tiptom.ch/Default.aspx (absichtlich nicht verlinkt)
(Achtung: Nicht jugendfreie Sprache! Beleidigende Ausdruecke!)
Gruesse,
Thomas
Hoi Thomas
Nur ganz kurz, ich habe nicht viel Zeit.
Ich glaube das ganze Problem ist stark abhängig vom verwendeten Browser. In der Schule habe ich dein Script mit Safari getestet, es funktioniert tadellos. Mit dem IE (5.2 für Macintosh) jedoch nicht.
Danke und beste Grüsse
Apfelmännchen
Nach meinem Verstaendnis: ja.
flush() und das "sichtbare" Ergebnis sind AFAIK
stark vom Browser abhaengig.
Vielleicht z.T. auch vom Webserver.
Ja, vom Webserver hängt es ebenfalls ab. Dein Script (auf deinem Server ausgeführt)funktioniert, z. B. mit Opera 7. Bei mir lokal funktionierts allerdings nicht.
Grüsse Apfelmännchen
Hallo,
flush()
Ja, vom Webserver hängt es ebenfalls ab.
Philipp Hasenfratz hat soeben ein paar weitere moegliche Punkte genannt:
Posting [pref:t=72942&m=419992] im Thread:
(PHP) Elemente während des Ladevorganges zeigen
Gruesse,
Thomas