Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[PHP] - FTP Upload - Fortschrittsanzeige?

Empfohlene Antworten

Veröffentlicht

Hallo,

ist es möglich, den Fortschritt eines FTP-Uploades auszugeben?

Wie sieht das mit dem TimeOut bei einem FTP-Upload via PHP aus?

kann es sein, dass der Browser nach X Minuten abbricht - wie z.B. bei php copy()?

Gruss

Oneside

FTP per PHP *verwirrtgugt* sowas geht ? ^^

als Timeout hast du den Script-Timeout des Servers / PHP-Dienstes. Oft 30sec bis 1min

irgendwie denke ich du meinst eher Upload per HTML <input type="file"> oder ?

Wat?

Ein Upload per HTML ist niemals möglich.

Dieses von Dir angesprochene Feld ist dafür da, um eine Datei auszuwählen, einen Upload kann man damit aber nicht realisieren. Dafür braucht man dann Perl oder PHP z.B.

HTML ist keine Programmiersprache (nochdazu mit solchen Funktionen).

Das TimeOut kann man bestimmt auch umgehen, da man sonst per PHP-FTP-Verbindung nur eine begrenzte Zeit zur Verfügung hätte.

Meine Fragen stehen noch :-)

zu deiner Information. das feld <input type="file"> hat nix mit der Sprache zu tun die auf dem Server läuft. Der Server schiebt das ding in sein Temp-Verzeichnis und wartet dann ob ein Script es haben will.

währe ja schrecklich wenn scripts sich plötzlich dateien vom Server holen könnten.

Um das auszuprobieren kannst du ja mal einen <input type="file"> an ein Script schicken das "hallo Welt" ausgibt, sonst aber nix tut.

...bringst mich gerade zum Grübeln...gilt der Timeout für den Upload....oder für das was danach folgt ? ... eigentlich dürfte der Upload ja nix mit dem Script zu tun haben...hmmmm..... werd gleich mal googlen ob ich da mehr drüber finde.

zu deiner Information. das feld <input type="file"> hat nix mit der Sprache zu tun die auf dem Server läuft. Der Server schiebt das ding in sein Temp-Verzeichnis und wartet dann ob ein Script es haben will.

währe ja schrecklich wenn scripts sich plötzlich dateien vom Server holen könnten.

Sorry, aber das hat leider nix mit meiner Frage zu tun.

Ich möchte Dateien per PHP über eine FTP-Verbindung übertragen.

Wie ich die Datei jetzt auswähle (ob per input-feld oder nicht) ist gar nicht relevant für meine Frage....

Ich möchte wissen, ob es möglich ist, während der Übertragung einer Datei per PHP den Fortschritt des Prozesses auszugeben.

Ich möchte wissen, ob es möglich ist, während der Übertragung einer Datei per PHP den Fortschritt des Prozesses auszugeben.

Ich sag jetzt einfach mal Nein. Die FTP-Funktionalität in PHP ist viel zu weit "oben" angesiedelt. Um das zu erreichen, müsstest du viel mehr Kontrolle über die FTP-Verbindung haben und genau wissen, was da gerade passiert etc. Ich kenn die Funktionen in PHP jetzt nicht, stell mir das aber wie die MySQL Funktionen vor o.ä. Also ftp_upload(Host, File); oder so. Damit stösst du den Upload nur an, hast aber ansonsten keine Kontrolle darüber.

hab mich mal umgesehen und würde daher antworten: nein.

Um eine Fortschrittsanzeige zu realisieren bräuchtest du ein 2. Script das auf das 1. zugreift und fragt "wie weit bist du"

Clientseitig (Java+Threading) kann ich mir sowas vorstellen. da PHP aber nur auf dem Server läuft und jeder Scriptaufruf für sich unabhängig von anderen... sehe ich da keine Möglichkeit.

soweit die Kommentare in anderen Foren ist der FTP Upload auch doppelt Traffic, erst HTTP/HTML auf nen Webserver und von da aus mit PHP wieder woanders hin ... was an dieser aussage dran ist, will ich jetzt nicht kommentieren :)

Es ist theoretisch so möglich wie es mein Vorgänger geschrieben hat, nur wird das ganze sehr sehr sehr ungenau, da das javascript immer wieder den Webserver fragt, wie weit bist Du? In der Traffic Zeit die Dein javascript wieder brauch um im Browser angezeigt zu werden, ist der fileupload ja auch schon weiter.

Dann kommt es auch noch auf die php Funktionen an, die Dein Provider Dir freundlicherweise mal sperrt, damit Du auch ja nichts auf dem Server manipulierst :D

Ich an Deiner Stelle würde darauf verzichten und lieber die Zeit in Sicherheitsaspekte stecken, sprich das $_FILES[] Array entsprechend auswerten, damit von aussen keine Angriffe in das System möglich sind

Bsp. für einen Bilderupload:


$errorflag = "FALSE";
###################################################################################################
$picture_upload_dir= "../../uploaded_pictures/";
$picture_dir = $serverpath . "uploaded_pictures/";
$tempname = $_FILES['datei']['tmp_name'];
$name = $_FILES['datei']['name'];
$type = $_FILES['datei']['type'];
$size = $_FILES['datei']['size'];
$fileerror = $_FILES['datei']['error'];
$info = getimagesize($tempname);
$breite = $info[0];
$hoehe = $info[1];
###################################################################################################
if (isset ($_POST['upload']) && $_POST['upload'] == "eintragen"){
$date=$_POST['date'];
// Keinen Titel eingeben
if ( $_POST['titel'] == "Titel"){
if (!isset ($error_msg) || $error_msg == "" ){
$error_msg = "Keinen Namen für die Datei angegeben!<br>Bitte geben Sie einen eindeutigen Titel für das Bild ein. Dateiupload abgebrochen!<br>";
}
else {

$error_msg .= "Keinen Namen für die Datei angegeben!<br>Bitte geben Sie einen eindeutigen Titel für das Bild ein. Dateiupload abgebrochen!<br>";

}
$errorflag = "TRUE";
}
else{
$titel=$_POST['titel'];
$kommentar = $_POST['kommentar'];
if ($kommentar == "Bemerkung"){
$kommentar = "";
}
$alternate = $_POST['alternate'];
if($alternate == "alternativer Text"){
$alternate = "";
}

$errorflag = "FALSE";

}
$kommentar=$_POST['kommentar'];
}
else {
$error_msg = "Keine Daten vorhanden!<br>";
$errorflag = "TRUE";
}
############################## Dateititel überprüfen ##############################################
$titel_check = preg_replace("[\s]", "_", $titel);
if ($titel_check == $titel){
$html_to_center .= "Dateititel nicht optimiert<br>";
}
else {
$titel = $titel_check;
$html_to_center .= "Dateititel optimiert! Neuer Titel: " . $titel . "<br>";
}

###################################################################################################
$info = getimagesize($tempname);
$breite = $info[0];
$hoehe = $info[1];
###################################################################################################
//Bildgrösse
if($breite>$max_b || $hoehe>$max_h)
{
if(!isset($error_msg)){
$error_msg = "Das Bild darf maximal ".$max_b."x".$max_h." Pixel groß sein.<br> Dateiupload abgebrochen!<br>";
}
else{
$error_msg .= "Das Bild darf maximal ".$max_b."x".$max_h." Pixel groß sein.<br> Dateiupload abgebrochen!<br>";
}
$errorflag = "TRUE";
}



####### Dateigrösse ###############################################################################

if($size > $_POST['MAX_FILE_SIZE'])
{
if(!isset($error_msg)){
$error_msg = "Achtung: Das Bild ist zu gross! Bitte Dateigrösse ändern auf maximal" . $MAX_FILE_SIZE . " Byte(s)<br>";
}
else{
$error_msg .= "Achtung: Das Bild ist zu gross! Bitte Dateigrösse ändern auf maximal" . $MAX_FILE_SIZE . " Byte(s)<br>Dateiupload abgebrochen!<br>";
}
$errorflag = "TRUE";
}
###################################################################################################
if (!is_dir($picture_upload_dir)){
if(mkdir($picture_upload_dir,0777)) {
$GLOBALS['picture_upload_dir']= $picture_upload_dir;
$html_to_center .= $picture_upload_dir . "wurde erfolgreich eingerichtet!<br>";
}
}
else{
$html_to_center .= "Ordner " . $picture_upload_dir . " bereits vorhanden<br>";
}


##################### Dateityp feststellen ########################################################
#jpeg oder gif?

if($type !="image/pjpeg" && $type!="image/gif" )
{
if(!isset($error_msg)){
$error_msg = "nur gif und jpeg Dateien dürfen hochgeladen werden.<br> Dateiupload abgebrochen!<br>";
}
else{
$error_msg .= "nur gif und jpeg Dateien dürfen hochgeladen werden.<br> Dateiupload abgebrochen!<br>";
}
$errorflag = "TRUE";
}
if ($type == "image/pjpeg"){
$dateisuffix = ".jpg" ;
$html_to_center .= "Dateiendung: " . $dateisuffix . "<br>";
}
elseif($type == "image/gif") {
$dateisuffix = ".gif";
$html_to_center .= "Dateiendung: " . $dateisuffix . "<br>";
}


###################################################################################################


############################# Fehler beim hochladen, Fehler ermitteln ############################
if ($fileerror != 0){
if(!isset($error_msg)){
$error_msg = "Es liegt ein Fehler beim hochladen der Datei vor, folgender Fehler wurde ermittelt.<br>";
}
else{
$error_msg .= "Es liegt ein Fehler beim hochladen der Datei vor, folgender Fehler wurde ermittelt.<br>";
}
switch($fileerror){
case 1:
$error_msg .= "Die hochgeladene Datei überschreitet die von Ihrem Provider für das hochladen festgelegte Größe.<br> ";
$errorflag = "TRUE";
break;
case 2:
$error_msg .= "Die hochgeladene Datei überschreitet die in dem HTML Formular für das hochladen festgelegte Größe.<br> ";
$errorflag = "TRUE";
break;
case 3:
$error_msg .= "Die Datei wurde nur teilweise hochgeladen.<br> ";
$errorflag = "TRUE";
break;
case 4:
$error_msg .= "Es wurde keine Datei hochgeladen.<br> ";
$errorflag = "TRUE";
break;
}
}
if ($errorflag == TRUE){
print $error_msg;
exit;
}
else{
print $hthml_to_center;
}
[/PHP]

Eine Fortschrittsanzeige für einen FTP-Upload via PHP lässt sich realisieren:

http://de2.php.net/manual/de/function.ftp-nb-fput.php

^diese Funktion blockiert nicht das script, d.h. das du während des uploads

noch andere Funktionien triggern kannst ;) z.B. eine die nachschaut wieviel

von der Datei schon auf dem Server ist.

ftp_nb_continue -- Nimmt die Übertragung einer Datei wieder auf (nicht blockierend)

ftp_nb_fget -- Überträgt den Inhalt einer Datei von dem FTP-Server und speichert sie in eine lokal geöffnete Datei (nicht blockierend)

ftp_nb_fput -- Speichert eine geöffnete Datei auf den FTP-Server (nicht blockierend)

ftp_nb_get -- Überträgt eine Datei von dem FTP-Server und speichert sie lokal (nicht blockierend)

ftp_nb_put -- Speichert eine Datei auf dem FTP-Server (nicht blockierend)

Bye

Jan

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.