Upload funzt nicht.



  • Hallo Zusammen

    Ich kann mir im Moment nicht einmal mehr ein von mir selbst geschriebenes Upload-Script erklären. Früher funktioniere alles bestens und nun scheitere ich immer bei "Verarbeitungsfehler" oder wenn ich auf "Hochladen" drücke passiert gar nichts, ausser dass das Formular neu geladen wird.

    Wo der Hase begraben liegt weiss ich nicht! Bei Filesize bekomm ich nen stat failed error, nheme ich Filesize aber raus, lande ich trotzdem wieder beim verarbeitungsfehler.

    Testen kann man den Upload unter http://www.globesolutions.ch/labs/awi/users/kurzd/file_verwaltung.php

    Der Code ist ein wenig lang, das tut mir leid:

    <?php
    									$upfile_name = strtolower($_FILES['upfile']);
    
    									$filepath = $_SERVER['DOCUMENT_ROOT']."/labs/awi/users/kurzd/pages/";
    									$web_dir = "pages/";
    
    									$desc[$upfile_name] = $_POST['beschreibung'];
    									include("config/description.php");
    									function php_format($string)
    									{
    
    									$string = str_replace("\"","\\\"",$string);
    									$string = str_replace(chr(13),"",$string);
    									return $string;
    									}
    
    									// der Dateiname enthält keine Leerzeichen
    
    									if ($upfile_name != "") {
    									if(($_POST['beschreibung'] == "") || ($_POST['beschreibung'] == "Kurze Beschreibung..."))
    									{
    									echo "<b>Achtung!</b><hr>";
    									echo "Sie müssen mindestens eine Beschreibung der Datei angeben!<br>";
    									echo "Ansonsten wird die Datei unwiederruflich gelöscht! Danke!<br><br>";
    									echo "<a href=\"file_verwaltung.php\">[Zurück]</a>";
    									exit;
    									}
    										else
    										{
    										if(filesize($_FILES['upfile'])==0)
    											{
    												echo "<B><font color=red>Verarbeitungsfehler!</font></b><hr><br>";
    												echo "Es ist ein Fehler aufgetreten! Entweder existiert die gewählte Datei nicht, ist nicht grösser als 0 Byte oder ";
    												echo "es besteht ein allgemeiner, interner Fehler! Klicken Sie auf zurück und versuchen Sie es nochmal.<br><br>";
    												echo "Sollte dieser Fehler mehrmals vorkommen, kontaktieren Sie bitte den Webmaster...<br><HR>";
    												echo "<a href=\"file_verwaltung.php\">[Zurück]</a>";
    												exit;
    											}
    												else
    												{
    
    													$datumlog = date("d.m.Y");
    													$uhrzeitlog = date("H:i:s");
    													$iplog = getenv("REMOTE_ADDR");
    													$host = gethostbyaddr($iplog);
    													$dateihandle = fopen("config/_log.txt", "a+");
    													$daten = "Datum:".$datumlog."\nUhrzeit:".$uhrzeitlog."\nIP-Adresse:".$iplog."\nHostname:".$host."\nHochgeladene Datei:".$upfile_name."\n===========================\n";
    													fwrite($dateihandle, $daten);
    													fclose($dateihandle);
    
    													$des_file= strtolower($filepath.$_FILES['upfile']['name']);
    													if (!file_exists($des_file)) {
    
    																		if(ereg("(\.php)|(\.html)|(\.jpeg)|(\.gif)|(\.jpg)|(\.htm)|(\.dhtml)|(\.dhtm)|(\.xhtml)|(\.xhtm)|(\.pdf)|(\.mid)|(\.midi)|(\.avi)|(\.mpeg)|(\.mpg)|(\.zip)|(\.php3)|(\.php4)|(\.txt)|(\.cgi)|(\.sql)|(\.dat)|(\.rar)|(\.tga)|(\.tar)|(\.pix)|(\.rtf)|(\.doc)|(\.sql3)|(\.wmp)|(\.mp3)|(\.dot)$", $des_file)) {
    
    												    if(move_uploaded_file($_FILES['upfile'], $des_file)) {
    
    	@$file = fopen("config/description.php","w");
    
     fputs($file,"<?".chr(13)."\n");
    
     foreach($desc as $filename => $description) {
    
      @fputs($file, '$desc['.$_POST['filename'].' = "'.php_format($description).'";'.chr(13).'\n');
     }
     @fputs($file,"?>");
    
     @fclose($file);
    
    																	echo "<font color=green>Datei gespeichert</font>";
    												} else {
    													echo "<font color=red><B>Upload fehlgeschlagen!</font></B><BR>";
    														echo "Dies kann folgende Gründe haben:";
    														echo "<hr>";
    														echo "<li> Dateifehler<br>";
    														echo "<li> Dateilimite zu gross<br>";
    														echo "<li> Skriptfehler<br>";
    														echo "<li> Unerlaubte Zeichen im Dateinamen<br>";
    														echo "<hr>";
    														echo "<a href=\"file_verwaltung.php\">[Zurück]</a>";
    														exit;
    													}
    										} else {
    												echo "<b><font color=\"red\">Diese Art von Datei ist nicht erlaubt!! Transaktion abgebrochen!</font></b><hr>";
    												echo "<br><b>[Erlaubte Dateitypen]</b><hr>";
    												echo ".jpg, ";
    												echo ".jpeg, ";
    												echo ".gif, ";
    												echo ".php, ";
    												echo ".html, ";
    												echo ".htm, ";
    												echo ".txt, ";
    												echo ".doc, ";
    												echo ".xhtml, ";
    												echo ".xhtm, ";
    												echo ".dhtml, ";
    												echo ".dhtm, ";
    												echo ".mid, ";
    												echo ".midi, ";
    												echo ".pdf, ";
    												echo ".avi, ";
    												echo ".rar, ";
    												echo ".mpg, ";
    												echo ".mpeg, ";
    												echo ".sql, ";
    												echo ".zip, ";
    												echo ".php3, ";
    												echo ".php4, ";
    												echo ".sql3, ";
    												echo ".cgi, ";
    												echo ".dat, ";
    												echo ".pix, ";
    												echo ".dat, ";
    												echo ".rtf, ";
    												echo ".tar, ";
    												echo ".tga ";
    												echo "<hr>";
    												echo "Der Webmaster übernimmt auf allfällige Fehler, Systemabstürze, Viren oder sonstige Schäden,<br>die durch Programme der DataExchange enstehen könnten, <b>keine Haftung!</B>";
    												echo "<hr>";
    												echo"<a href=\"file_verwaltung.php\">[Zurück]</a>";
    													exit;
    												}
    									}
    									}
    									}
    									}
    
    									unset($files);
    									if ($dh = opendir($filepath))
    									{
    									while($file = readdir($dh))
    									{
    									if (!ereg("^\.+$",$file))
    									{
    									$files[] = $file;
    									}
    									}
    									closedir($dh);
    									}
    
    									$webpath = $web_dir;
    
    									if (is_array($files)) {
    
    									echo "<table border=\"0\" cellpadding=\"1\" cellspacing=\"0\" width=\"100%\">\r\n";
    									echo "<tr bgcolor=\"#C0C0C0\">";
    									echo "<th><font size=\"2\">Datei</font></th>";
    									echo "<th><font size=\"2\">Beschreibung</font></th>";
    									echo "<th><font size=\"2\">Grösse</font></th>";
    									echo "<th><font size=\"2\">Datum</font></th>";
    									echo "<th colspan=\"3\"><font size=\"2\">Aktionen</font></th></tr>\r\n";
    
    									sort($files);
    									natcasesort($files);
    									reset($files);
    
    									foreach($files as $idx=>$file) {
    
    									//Umwandlung von Bytes in MB
                                        $einheit = array("Byte","KB","MB","GB");
                            			$size_einheit = 0;
                                        $size = filesize($filepath.$file);
                                        while($size > 999) {
                                         $size_einheit++;
                                         $size /= 1024;
                                        }
                                        $file_size = number_format($size,2,',','.').' '.$einheit[$size_einheit];
    
    									if ($idx % 2) {
    									echo "<tr bgcolor=\"#EEEEFF\">";
    									} else {
    									echo "<tr bgcolor=\"#FFFFFF\">";
    									}
    									printf ("<td><font size=\"2\"><a href=\"%s%s\" target=\"_blank\">%s</a></font></td>",
    									$webpath, $file, $file);
    									printf ("<td align=\"center\"><font size=\"2\">%s</font></td>",$desc[$file]);
    									printf ("<td align=\"center\"><font size=\"2\">%s</font></td>",
    									$file_size);
    									printf ("<td align=\"center\"><font size=\"2\">%s</font></td>",
    									date("d.m.Y H:i:s", filemtime($filepath.$file)));
    									printf ("<td align=\"right\"><a href=\"%s?file=%s\"><font size=\"2\">Löschen</font></a></td>",
    									"delete.php", $file);
    									printf ("<td align=center><a href=\"%s?file=%s\"><font size=\"2\">Umbenennen</font></a></td>",
    									"rename.php", $file);
    
    									printf ("<td align=left><a href=\"%s?file=%s\"><font size=\"2\">Editieren</font></a></td>",
    									"edit.php", $file);
    									echo "</tr>";
    										}
    									echo "</table>";
    									}
    
    									echo "<hr>";
    									$datum = date("d.m.Y");
    									$uhrzeit = date("H:i:s");
    									$ip = getenv("REMOTE_ADDR");
    									echo ("<font color=\"blue\"><font size=\"2\">Ihre IP-Adresse ist: $ip</font></font>");
    									echo ("<br><font size=\"2\">Heute ist der $datum");
    									echo (", $uhrzeit Uhr</font><BR>");
    
    									function dirsize($dir) {
    									$dh = opendir($dir);
    									$size = 0;
    									while (($file = readdir($dh)) !== false) {
    									if ($file != "." and $file != "..") {
    									$path = $dir."/".$file;
    									if (is_dir($path))
    									$size += dirsize($path);
    									elseif (is_file($path))
    									$size += filesize($path);
    									}
    									}
    									closedir($dh);
    									return $size;
    									}
    
    									function format_size($rawSize)
    									{
    									return round($rawSize/1048576, 2);
    									}
    
    									$mb_free = 10 - format_size(dirsize('./'));
    									if($mb_free > 0) // wenn mehr als 10 MB frei sind
    									{
    									echo "<b><font size=\"2\">Aktuelles Verzeichnis:</b> <i>".$filepath."</font></i>";
    									echo '<form action="file_verwaltung.php" method="post" enctype="multipart/form-data">';
    									echo "<table width=100% border=0 cellpadding=0 cellspacing=0>";
    									echo "<tr><td><input type=\"file\" name=\"upfile\"></td></tr>";
    									echo "<tr><td><textarea rows=3 colls=5 name=\"beschreibung\" style=\"width:290px\">Kurze Beschreibung...</textarea></td></tr>";
    									echo "<tr><td><input type=\"reset\" value=\"Zurücksetzen\" style=\"width:142px\"> <input type=\"submit\" value=\"Hochladen\" style=\"width:142px\"></td></tr>";
    									echo "</table>";
    									echo "</form>";
    									echo "<br>";
    
    									$datei22n = fopen("config.account.php", "r+");
                                        $daten22n = fgets($datei22n);
                                        $daten22n=explode("|",$daten22n);
                                        if($daten22n[0] == "1")
                                        {
    									echo "<font size=\"2\">Es stehen noch ".$mb_free." MB zur Verfügung.<br><br>
    									<b>Emailbenachrichtigung bei geringem Webspace:</b> <i><a href=\"setup.php\">Aktiv</a></i></font>";
    									}
    									else
    									{
    									echo "<font size=\"2\">Es stehen noch ".$mb_free." MB zur Verfügung.<br><br>
    									<b>Emailbenachrichtigung bei geringem Webspace:</b> <i><a href=\"setup.php\">Deaktiviert</a></i></font>";
    									}
    									fclose($datei22n);
    									}
    									else // es sind weniger als 10 MB frei
    									{
    
    									$datei = fopen("config.account.php", "r+");
    									$daten = fgets($datei);
    									$daten_neu = explode("|",$daten);
    
    									if($daten_neu == "1")
    									{
    
    									$datein = fopen("config.kurzd.php", "r+");
                                        $datenn = fgets($datein);
                                        $datenn=explode("|",$datenn);
    
                                        $header = "From:info@deinedomain.de(DeineDomain-WebSpace)";
                                        $nachricht = "
                                        Sehr geehrter ".$datenn[3]." ".$datenn[4]."
                                        \n
    									Dein Webspace auf http://www.globesolutions.ch/labs/awi/users/kurzd/ ist aufgebraucht.
    									Es steht Dir somit kein Speicherplatz mehr zur Verfügung. Ein kleiner Tipp, sodass du an Webspace sparen kannst:\n\n
    									Lösche immer wieder Dateien, die Du nicht mehr benötigst sofort. Denn anstatt ein Datenchaos aufzumachen, ist es besser, wenn man Speicherplatz sparen kann oder nicht?\n\n
    									Diese Automatische Emailbeanchrichtiung kannst Du jederzeit unter den Accounteinstellungen wieder deaktivieren.";
    
    									mail($datenn[2], "Du hast deine 10MB Webspace aufgebraucht...", $nachricht, $header);
    									fclose($datein);
    
    									echo "<font size=\"2\">Entweder ist ein Fehler aufgetreten, oder Sie haben die 10MB Webspace aufgebraucht.<br>Die Automatische Emailbenachrichtigung ist eingeschaltet.</font>";
    									}
    									else
    									{
    									echo "<font size=\"2\">Entweder ist ein Fehler aufgetreten, oder Sie haben die 10MB Webspace aufgebraucht.<br>Die Automatische Emailbenachrichtigung ist deaktiviert.</font>";
    									}
    
    									exit;
    									}
    									?>
    

    Versuchte schon alles mit POST, GET, REQUEST etc.. der Document_root, hier im Script alias "filepath" definiert stimmt!

    Freundliche Grüse
    Wolf



  • Es ist ein Fehler aufgetreten! Entweder existiert die gewählte Datei nicht, ist nicht grösser als 0 Byte oder es besteht ein allgemeiner, interner Fehler! Klicken Sie auf zurück und versuchen Sie es nochmal.

    Sollte dieser Fehler mehrmals vorkommen, kontaktieren Sie bitte den Webmaster...

    Meinst du diese Fehlermeldung?



  • acti0n schrieb:

    Es ist ein Fehler aufgetreten! Entweder existiert die gewählte Datei nicht, ist nicht grösser als 0 Byte oder es besteht ein allgemeiner, interner Fehler! Klicken Sie auf zurück und versuchen Sie es nochmal.

    Sollte dieser Fehler mehrmals vorkommen, kontaktieren Sie bitte den Webmaster...

    Meinst du diese Fehlermeldung?

    Ja genau die meine ich.
    Die Datei wurde aber im FOrmular ausgewählt und ist 317KB gross.
    Lasse ich diese Fehlerbehandlung (nicht für den code selbst gedacht) weg, dann passiert trotzdem nichts.

    D.h: Das Formular wird nach dem klick auf "Hochladen" einfach neu geladen aber sonst passiert nichts, oder eben die Fehlermeldung kommt. Wieso kann ich mir leider nicht erklären.

    Das Formular ist folgende Codezeile:

    echo "<b><font size=\"2\">Aktuelles Verzeichnis:</b> <i>".$filepath."</font></i>";
                                        echo '<form action="file_verwaltung.php" method="post" enctype="multipart/form-data">';
                                        echo "<table width=100% border=0 cellpadding=0 cellspacing=0>";
                                        echo "<tr><td><input type=\"file\" name=\"upfile\"></td></tr>";
                                        echo "<tr><td><textarea rows=3 colls=5 name=\"beschreibung\" style=\"width:290px\">Kurze Beschreibung...</textarea></td></tr>";
                                        echo "<tr><td><input type=\"reset\" value=\"Zurücksetzen\" style=\"width:142px\"> <input type=\"submit\" value=\"Hochladen\" style=\"width:142px\"></td></tr>";
                                        echo "</table>";
                                        echo "</form>";
    


  • while ((file=readdir(file = readdir(dh)) !== false) {

    könnte es sein, dass !== nicht möglich ist? ist zwar warscheinlich nicht der Fehler aber mal ausprobieren...



  • Hab ich geändert, und stelle keine veränderungen am Vorgang fest.

    Jedoch steht hier:

    //....
    	if(filesize($_REQUEST['upfile'])==0)
    											{
    												echo "<B><font color=red>Verarbeitungsfehler!</font></b><hr><br>";
    												echo "Es ist ein Fehler aufgetreten! Entweder existiert die gewählte Datei nicht, ist nicht grösser als 0 Byte oder ";
    												echo "es besteht ein allgemeiner, interner Fehler! Klicken Sie auf zurück und versuchen Sie es nochmal.<br><br>";
    												echo "Sollte dieser Fehler mehrmals vorkommen, kontaktieren Sie bitte den Webmaster...<br><HR>";
    												echo "<a href=\"file_verwaltung.php\">[Zurück]</a>";
    												exit;
    											}
    //....
    

    Ändere ich das auf:

    //....
    	if(filesize($upfile)==0)
    											{
    												echo "<B><font color=red>Verarbeitungsfehler!</font></b><hr><br>";
    												echo "Es ist ein Fehler aufgetreten! Entweder existiert die gewählte Datei nicht, ist nicht grösser als 0 Byte oder ";
    												echo "es besteht ein allgemeiner, interner Fehler! Klicken Sie auf zurück und versuchen Sie es nochmal.<br><br>";
    												echo "Sollte dieser Fehler mehrmals vorkommen, kontaktieren Sie bitte den Webmaster...<br><HR>";
    												echo "<a href=\"file_verwaltung.php\">[Zurück]</a>";
    												exit;
    											}
    //....
    

    Bekomme ich im Script den Abbruch an folgender Stelle (Fehler):
    Warning: filesize() [function.filesize]: stat failed for Array in /var/www/vhosts/globesolutions.ch/httpdocs/labs/awi/users/kurzd/file_verwaltung.php on line 172

    Doch "upfile" ist der name des FIle-Feldes im Formular.



  • 1. Kannst Du denn überhaupt Dateien in dieses Verzeichnis schreiben? Hast Du Zugriffsrechte darauf? Du kannst ja mal testweise eine Datei in dieses Upload-Verzeichnis schreiben.
    2. Lass Dir mal den Inhalt dieses Upload-Info-Arrays ausgeben oder gleich phpinfo(); ich bilde mir ein dass zwischen den einzelnen php-Versionen sich die Bezeichniungen sich geändert haben.



  • Techniker schrieb:

    könnte es sein, dass !== nicht möglich ist? ist zwar warscheinlich nicht der Fehler aber mal ausprobieren...

    !== ist absolut korrekt und hier überhaupt erst sinnvoll. Der Identitätsoperator (!==) prüft im Gegensatz zum Äquivalenzoperator (!=) auch den Datentyp auf Gleichheit.

    while (($file = readdir($dh)) !== false)
    

    Hier gibt der Ausdruck (file=readdir(file = readdir(dh)) einen String zurück, es sei denn, das Verzeichnis wurde zu Ende durchlaufen, dann wird der Bool'sche Wert false zurückgegeben. Das !== ist hier also sehr sinnvoll, da eben nicht nur geprüft wird, ob der Wert des Ausdrucks sich zu false casten lässt, sondern wirklich, ob er false ist.

    Ein Ändern von !== zu != ist genau das, was du beschreibst: Nämlich falsch! Würde nämlich eine Datei im Verzeichnis existieren, die 0 heißt ("0" als Dateiname), so würde (file=readdir(file = readdir(dh)) "0" ergeben, was zu false gecastet werden kann und die Schleife würde abbrechen, obwohl das Verzeichnis nicht komplett durchlaufen ist.



  • witte_ schrieb:

    1. Kannst Du denn überhaupt Dateien in dieses Verzeichnis schreiben? Hast Du Zugriffsrechte darauf? Du kannst ja mal testweise eine Datei in dieses Upload-Verzeichnis schreiben.

    Ja. Der gesamte Pfad labs/awi/users/kurzd/pages/ ist auf CHMOD 777 gesetzt.
    Im übrigen wird der Pfad über folgenden Code:

    echo "<b><font size=\"2\">Aktuelles Verzeichnis:</b> <i>".$filepath."</font></i>";
    

    korrekt ausgegeben.

    witte_ schrieb:

    2. Lass Dir mal den Inhalt dieses Upload-Info-Arrays ausgeben oder gleich phpinfo(); ich bilde mir ein dass zwischen den einzelnen php-Versionen sich die Bezeichniungen sich geändert haben.

    Wie meinst Du das jetzt? Allerdings haben sich einige Befehle von PHP4 auf PHP5 geändert aber ich kann mir nicht vorstellen welche. Natürlich das $_SERVER['DOCUMENT_ROOT'] vorher in meinem Script eben nur $DOCUMENT_ROOT hiess und so nicht funktionierte war wohl klar.

    Es ist eben ein älteres Projekt was ich vor ca. 4 Jahren aufgegeben habe und nun ausbessern und weiterführen möchte. Es ist eine einzige Datei namens install.php mit ca. 30'000 Zeilen Code, welche innerhalb von zwei Sekunden alle Verzeichnise und alle 45miteinander verknüpften PHP -Dateien und rechte selbst erstellt und die E-Mails auch selbst erstellt. Dies zudem noch alles individuell an den zu registrierenden User (mittels Formular) anpassbar.

    D.h: Ich muss nur das Registrierungsformular onlinestellen und der rest wird durch eine einzige PHP-Datei erledigt. 🙂

    Grüsse
    Wolf

    PS: árn[y]ék du hast recht, aber im Moment probier ich wirklich alles. Das Script funkitoniere bis ins JAhre 2006, danach nicht mehr. Ich vermute eben dass es mit den neuen Befehlen zu tun hat, kann mir im Moment aber kein Bild daraus machen.



  • Ich wollte sagen, dass sich mittlerweile die Variablen-/Array-Key-Namen, in dem der Name der Originaldatei, Größe, Name der hochgeladenen Datei und Mimetype steht, sich geändert haben. Prüf, ob diese Namen mitdem Originalskript noch übereinstimmen.

    _FILES['userfile']['name'] _FILES['userfile']['type']
    _FILES['userfile']['size'] _FILES['userfile']['tmp_name']

    => ist jetzt ein Array, keine einzelne Variable.



  • Sorry, blöde frage:

    Und wie?

    lg



  • Was wie?

    Prüfe, ob $_FILES['upfile'] ein Array ist. var_dump(), is_array() oder was auch immer, das wirst Du doch wissen müssen. Wahrscheinlich wird es jetzt $_FILES['upfile']['filename'] heissen muesssen oder so.



  • Hab jetzt nichts konstruktives beizutragen, aber....
    Dominic!
    Du lebst auch noch??
    Ist ja cool!



  • Wubbel schrieb:

    Hab jetzt nichts konstruktives beizutragen, aber....
    Dominic!
    Du lebst auch noch??
    Ist ja cool!

    Ach der Wubbel.... hey hallo!
    Ja in der Tat ich lebe noch *g*... gib mal deine MSN-Addy.... meine ist wolfi_ag@hotmail.com ... danke *g*

    @Witte_
    ich kann mit dem leider nichts anfangen. Die Prüfung ergab eigentlich noch immer dasselbe korrekte file und ein korrekter Pfad zurück.



  • àhm Witte_

    ich lande bei folgender Ausgabe und danach bricht das Script wie gewohnt ab:

    Warning: filesize() [function.filesize]: stat failed for kurz.jpg in /var/www/vhosts/globesolutions.ch/httpdocs/labs/awi/users/kurzd/file_verwaltung.php on line 172
    

    und zwar beim "Verarbeitungsfehler". Filesize lautet bei mir so:

    //....
    	else
    										{
    										if(filesize($_FILES['upfile']['name'])==0)
    											{
    												echo "<B><font color=red>Verarbeitungsfehler!</font></b><hr><br>";
    												echo "Es ist ein Fehler aufgetreten! Entweder existiert die gewählte Datei nicht, ist nicht grösser als 0 Byte oder ";
    												echo "es besteht ein allgemeiner, interner Fehler! Klicken Sie auf zurück und versuchen Sie es nochmal.<br><br>";
    												echo "Sollte dieser Fehler mehrmals vorkommen, kontaktieren Sie bitte den Webmaster...<br><HR>";
    												echo "<a href=\"file_verwaltung.php\">[Zurück]</a>";
    												exit;
    											}
    //....
    

    Also der Dateiname wird mir korrekt zurückgegeben...

    Kommentiere ich die Dateigrössen-Prüfung aus, klappt alles wie gewohnt.. also liegt der Fehler irgendwo bei filesize denn $_FILES['upfile']['name']sowie ['size'] klappt nicht. 🙂


Anmelden zum Antworten