php.de

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

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.05.2005, 15:07  
Gast
 
Beiträge: n/a
Standard Dateiupload (Abbruch erkennen)

Hallo,

ich habe ein Problem mit dem Erkennen von Abbrüchen beim Dateiupload. Eigentlich sollte diese Eigenschaft ja über den Index "error" im Array $_FILES auslesbar sein. Dies funktioniert aber bei mir nicht. Error ist auch bei abgebrochenen Uploads immer "0". Eine Überprüfung mit connection_status() ergibt auch immer "0".

Hier ein Beispielcode:

PHP-Code:
<?php
$field_name 
"up_file";
$home_url "http://www.domain.de";

if (empty(
$_POST['action'])) {
    echo 
"<HTML><BODY>
        <FORM ACTION=\""
.$_SERVER["PHP_SELF"]."\" METHOD=\"post\" ENCTYPE=\"multipart/form-data\">
        <INPUT TYPE=\"hidden\" NAME=\"action\" VALUE=\"upload\">
        <INPUT TYPE=\"file\" NAME=\"$field_name\">
        <INPUT TYPE=\"submit\">
        </FORM>
    </BODY></HTML>"
;

} else {
    
$file $_FILES[$field_name]['tmp_name'];    
    
$file_name $_FILES[$field_name]['name'];
    
$file_size $_FILES[$field_name]['size'];
    
$file_error $_FILES[$field_name]['error'];

    
$fp fopen($_SERVER['DOCUMENT_ROOT']."/files/log.txt""a");
    
fwrite($fpdate("h:m:s"time())." : File: \"$file_name\", Size: \"$file_size\", Error: \"$file_error\", Connection: \"".connection_status()."\".\n");
    
fclose($fp);
    
    switch(
$file_error) {
        case 
0:     echo "Status: No error has occured.
\n"
; break;
        case 
1:     die("Error 1: size exceeds php.ini limit");     
        case 
2:        die("Error 2: size exceeds FORM limit");    
        case 
3:        die("Error 3: file partially uploaded");        
        case 
4:        die("Error 4: no file selected");            
        default:    die(
"Error $file_error: unknown upload error");         
    }
    
    
$destination $_SERVER['DOCUMENT_ROOT'].'/files/'.$file_name;
    
    if (
move_uploaded_file($file$destination)) {
        echo 
"UPLOAD SUCCESS: File has been uploaded successfully to 
            <A HREF=\"$home_url/$file_name\"><U>$home_url/$file_name</U></A>"
;
    } else {
        echo 
"UPLOAD FAILED: Error while trying to move uploaded file...";
    }
}

?>
Lade ich mit diesem Code eine Datei auf den Server (Verzeichnis /files) und breche den Upload ab (schliesse das Fenster), dann schreibt er in die log.txt :

02:05:17 : File: "test.txt", Size: "39", Error: "0", Connection: "0".

Kann mir da jemand helfen????

Infos:

Php-version: 4.3.11-0
System: Debian Woody
phpinfo(): http://nopaste.php-q.net/132560

Danke!

Grüße

Felix
[/code]
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 08.05.2005, 15:22  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

1. das ist keine profifrage - profis debuggen richtig.
2. http://de2.php.net/manual/de/feature...oad.errors.php - verwende statt der numerischen werte die php-konstanten.
3. was meinst du mit abgebrochenem upload? du lädst über das formular dateien hoch, und während der browser noch arbeitest, schließt du das fenster?
oder meinst du zu große dateien?
4. was meinst du mit 'bei mir'? php-version, beriebssystem, link zur phpinfo() ist im profibereich selbstverständlich.
axo ist offline   Mit Zitat antworten
Alt 08.05.2005, 15:31  
Gast
 
Beiträge: n/a
Standard

zu 1: ... lol
zu 2: kommt für die demo aufs gleiche hinaus
zu 3: ich breche den upload ab. Wie ist egal: fenster schliessen, Abbrechen drücken, Strom am Client abschalten
zu 4: siehe edit, sry

P.S. Eigentlich müsste "Error" dann gleich 3 oder "UPLOAD_ERR_PARTIAL" sein. Ist es aber nicht.
  Mit Zitat antworten
Alt 08.05.2005, 16:41  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Zitat:
Kapitel 20. Verbindungssteuerung
Anmerkung: Folgendes trifft auf die Versionen 3.0.7 und später zu.

PHP erhält intern einen Verbindungsstatus. Dieser kann drei Zustände annehmen:


0 - NORMAL

1 - ABORTED

2 - TIMEOUT


Wenn ein PHP-Skript aktiv ist, ist der Status üblicherweise NORMAL. Sollte der Client-Rechner die Verbindung beenden, wird der Status auf ABORTED gesetzt. Ein clientseitiges Beenden der Verbindung wird für gewöhnlich veranlaßt, wenn der Benutzer den STOP-Button seines Browsers drückt. Wenn das eingestellte Zeitlimit (siehe set_time_limit()) überschritten wird, wird der Status TIMEOUT gesetzt.

Sie können entscheiden, ob der Verbindungsabbruch seitens des Clients den Abbruch des Skriptes zur Folge haben soll. Manchmal ist es sinnvoll, Skripte sauber zu beenden, auch wenn kein Browser mehr zur Verfügung steht, der die Ausgabe empfängt. Die Abarbeitung eines Skriptes wird standardmäßig abgebrochen, wenn der Client die Verbindung beendet. Dieses Verhalten kann sowohl durch die Option ignore_user_abort in der Konfigurationsdatei php3.ini, durch die entsprechende Option php3_ignore_user_abort in der Apache-Konfigurationsdatei als auch durch ignore_user_abort() beeinflußt werden. Wenn PHP nicht angewiesen wird, einen Verbindungsabbruch durch den Benutzer zu ignorieren und die Verbindung dann durch den Benutzer beendet wird, wird die Abarbeitung des Scriptes abgebrochen. Die einzige Ausnahme ist, wenn durch die Funktion register_shutdown_function() eine Shutdown-Funktion angegeben wird, die bei clientseitigem Abbruch ausgeführt wird. Wenn dann der Benutzer den STOP-Button seines Browsers drückt, wird PHP bei der nächsten Ausgabe des Skriptes feststellen, dass die Verbindung abgebrochen wurde und die Shutdown-Funktion aufrufen. Diese Shutdown-Funktion wird auch aufgerufen, wenn das Skript auf normalem Wege beendet wird, daher sollte man, wenn man für den Fall eines Benutzerabbruchs etwas anderes vorgesehen hat, die Funktion connection_aborted() verwenden. Sie gibt TRUE zurück, wenn die Verbindung abgebrochen wurde.

Ein Skript kann ebenfalls durch den eingebauten Script-Timer beendet werden. Der Standard-Timeout beträgt 30 Sekunden. Er kann durch die Option max_execution_time in der php3.ini, durch den entsprechenden Eintrag php3_max_execution_time in der Apache-Konfigurationsdatei oder durch die Funktion set_time_limit() beeinflußt werden. Bei Zeitüberschreitung wird das Skript beendet und, genau wie im obigen Fall des Verbindungsabbruchs, eine registrierte Shutdown-Funktion ausgeführt. Um zu überprüfen, ob es sich um einen Abbruch aufgrund von Zeitüberschreitung handelt, kann die Funktion connection_timeout() benutzt werden. Sie gibt TRUE zurück, wenn es sich um eine Zeitüberschreitung handelt.

Zu bemerken ist, dass der ABORTED und der TIMEOUT-Status gleichzeitig auftreten können. Dies ist möglich, wenn PHP angewiesen wird, Benutzerabbrüche zu ignorieren. PHP wird feststellen, dass der Benutzer die Verbindung abgebrochen hat, das Skript allerdings läuft weiter. Sollte es dann das Zeitlimit erreichen, wird es abgebrochen und eine Shutdown-Funktion, wenn definiert, wird aufgerufen. Zu diesem Zeitpunkt kann man feststellen, dass connection_timeout() und connection_aborted() TRUE zurückgeben. Diese beiden Statusmöglichkeiten können auch durch einen Aufruf der Funktion connection_status() abgefragt werden. Sie liefert ein Bitfeld des aktiven Status. Wenn beispielsweise TIMEOUT und ABORTED aktiv sind, wird 3 zurückgegeben.
Zitat:
ignore_user_abort Off Off
1)-> ignore_user_abort()
2) würde ich behaupten das mit dem connection_status() funktioniert wie oben im text angegeben auch nur dann wenn eben versucht wurde etwas auszugeben, weil wohl nur so festgestellt werden kann, dass die verbindung unterbrochen wurde.

sind nur ideen.

mfg
robo47
robo47 ist offline   Mit Zitat antworten
Alt 08.05.2005, 17:27  
Erfahrener Benutzer
 
Registriert seit: 01.12.2003
Beiträge: 4.113
supertramp
Standard

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum.

Bemerkung:
Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/forum/viewtopic.php?t=21431
Bei Einspruch bitte an mich wenden.

moved to PHP - Fortgeschrittene
__________________
Aufstrebend, kompetent und werbefrei.
www.developers-guide.net
supertramp ist offline   Mit Zitat antworten
Alt 08.05.2005, 21:40  
Gast
 
Beiträge: n/a
Standard

Richtig robo47,

PHP stellt nur fest, ob die verbindung ok ist wenn was gesendet wurde. Ich habe das auch schon getestet. Ich habe einfach ignore_user_abort(); echo "test"; flush; versucht... funktioniert auch nicht...

Grüße

Felix
  Mit Zitat antworten
Alt 08.05.2005, 21:44  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Krusenbaum
PHP stellt nur fest, ob die verbindung ok ist wenn was gesendet wurde. Ich habe das auch schon getestet.
Bei einem HTTP Upload gehört das File zum Request des Clients. PHP kriegt davon erst dann was mit, wenn der Upload beendet ist.
  Mit Zitat antworten
Alt 09.05.2005, 11:00  
Gast
 
Beiträge: n/a
Standard

ja das ist schon klar... aber wenn php davon was mitbekommt, dann kann ich doch normalerweise abfragen, ob die Verbindung zum Client noch "aktiv" ist. Er bestätigt mir aber immer eine aktive Verbindung...
  Mit Zitat antworten
Alt 09.05.2005, 13:21  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Krusenbaum
Er bestätigt mir aber immer eine aktive Verbindung...
Was verstehst Du unter einer "aktiven Verbindung"? Der Webserver ist doch keine Mailbox, wo der Status der Modems abgefragt werden kann.
Wenn PHP zu arbeiten anfängt, hat der Client das letzte "HTTP-Byte" gesendet.
  Mit Zitat antworten
Alt 10.05.2005, 11:06  
Gast
 
Beiträge: n/a
Standard

ach man das ist doch klar. mit aktiver verbindung meine ich das php in der lage ist, zum Client Daten zu senden, beispielsweise mit echo.
  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
Abbruch nach einiger Zeit.... dh1sbg PHP-Fortgeschrittene 3 08.07.2008 12:48
Dateiupload - mehrer Dateien gleichzeitig asyoulikeit PHP Tipps 2008 3 11.06.2008 08:49
Parameter erkennen. d.brenda PHP Tipps 2008 1 20.02.2008 12:43
Mit PHP FTP Ordner erkennen mokus PHP Tipps 2007 14 09.07.2007 22:22
Dateityp mit Javascript in einem Input erkennen Plague HTML, Usability und Barrierefreiheit 11 01.07.2007 16:31
proxy server erkennen notyyy PHP Tipps 2007 13 22.06.2007 23:46
iframe erkennen ? simsalabim PHP Tipps 2007 13 23.03.2007 20:30
Könnt ihr einen Fehler erkennen?! NetLook PHP Tipps 2006 6 20.10.2006 10:52
Dateiupload php html PHP Tipps 2005-2 4 25.10.2005 19:18
Nach Serverumzug Dateiupload fehlerhaft, warum? PHP-Fortgeschrittene 1 17.10.2005 09:55
Dateiupload über Formular patr1k PHP Tipps 2005-2 3 07.09.2005 15:15
Dateiupload Beispielcode funktioniert nicht Anotherone PHP Tipps 2005-2 3 27.08.2005 10:00
Dateiupload und Link in Datenbank abspeichern PHP Tipps 2004 1 15.10.2004 13:17
Dateiupload und PHP.ini Konfiguration Novan PHP-Fortgeschrittene 1 20.08.2004 15:14
Dateiupload! PHP Tipps 2004 4 31.07.2004 23:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php upload abbruch, drei upload abbruch, php upload fehler feststellen, php upload verbindung unterbrochen, php http upload abbruch, php ftp upload cancel, html input file abbruch, php arbeitet weiter obwohl der client abgebrochen hat, php \verbindung unterbrochen\ erkennen, php upload \[error] => 2\, upload feststellen, mit js überprüfen ob upload beendet, php abbruch ini, php verbindungsabbruch, verbindungsabbruch feststellen, php post abbrechen, php upload zeitlimit, php erkennen von dateien, upload verbindungsabbruch, php upload große datei abbruch

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:34 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.