Datei Upload will nicht mehr....

looopi

Grünschnabel
Hallo zusammen!

Nach Serverumzug will mein Dateiupload nicht mehr...
Auf anderen Servern funktioniert das Script nach wie vor wunderbar. Muss also eigentlich an einem Befehl liegen, der in einer neueren PHP-Version nicht mehr unterstützt wird? Sonst fällt mir nichts mehr ein...

Hier nur das wesentliche:

PHP:
$file = $_FILES['file']['name'];  
$filetype = $_FILES['file']['type'];  
$filetmp = $_FILES['file']['tmp_name'];  
$filename = $objekt . ".jpg"; 


$updir = "objekte/"; 
move_uploaded_file($filetmp, $updir.$filename); 
if (filesize($updir.$filename)<1) die ('Sie haben versucht eine leerer Datei hochzuladen!');

Ich bin mir auch gar nicht sicher ob es an obigem Script liegt, oder am Formular vorher.

PHP:
<form method="post" action="<? $PHP_SELF ?>" enctype="multipart/form-data">
<input type="file" name="file">
</form>
Problem ist nämlich, dass bei method=post die Eingaben irgendwie nicht übergeben werden - so mein Eindruck. Ich bekomme nach "absenden" das Formular erneut angezeigt, aber leer (auch bei reinen Text-Formularen ohne Dateiupload). Lasse ich method=post weg funktioniert es zumindest bei Text-Formularen.

Ich hoffe man versteht was ich meine....

Hat jemand eine Idee? Bin langsam mit meinem Latein am Ende...
Danke!
 
Kommt irgendwas, wenn du

PHP:
ini_set('display_errors', 1);
error_reporting(E_ALL);

an den Anfang des Scripts setzt?

ich nehme an, der Submitbutton fehlt jetzt nur im Beispiel?

Wie sieht es mit den Zugriffsrechten des Uploadsordners aus? $objekt besitzt einen Inhalt?
 
ich nehme an, der Submitbutton fehlt jetzt nur im Beispiel?

Wie sieht es mit den Zugriffsrechten des Uploadsordners aus? $objekt besitzt einen Inhalt?

Zugriffsrechte sind vorhanden, Submitbutton ist natürlich ebenso vorhanden und das Zielverzeichnis ist natürlich auch vorhanden.

Ich schätze wie gesagt das Problem liegt entweder an einem Befehl, der in der PHP-Version auf dem neuen Server nicht unterstützt wird ODER im Upload der Datei an sich. Wenn ich im HTML-Formular "method=post" drin habe kommt bei der Verarbeitung der hochgeladenen Datei der Hinweis "leere Datei hochgeladen". Bei reinen Text-Formularen wurden auch keine Formular-Inhalte übertragen, daraufhin habe ich dort das post weggelassen und es funktionierte...

Eure obigen Hinweise bringen folgende Fehler an den Bildschirm:

Notice: Undefined index: file in ***.php on line 314
Datei:

Notice: Undefined index: file in ***.php on line 316
Type:

Notice: Undefined index: file in ***.php on line 318
tmp:
Dateiname neu:113.jpg
[[Das sind die ersten Zeilen in meinem Script ganz oben]]

Warning: filesize() [function.filesize]: stat failed for objekte/113.jpg in ***.php on line 347
Sie haben versucht eine leerer Datei hochzuladen!
 
Checke mal die PHP-Einstellung variables_order .

Wenn PHP keine $_POST-Variablen erzeugt könnte es an dieser Einstellung liegen, der Wert muss ein String sein der ein P enthält(Standard ist EGPCS) . Kein P , keine $_POST-Variablen(einschliesslich $_FILES)


Code:
echo ini_get('variables_order');
 
Zuletzt bearbeitet:
Hallo!

Hier nur das wesentliche:
Kann man sehen wie man will.
Zumindest geht aus dem Code nicht hervor ob Du überhaupt prüfst dass das Formular abgeschickt wurde und ob die Input-Felder gefüllt sind.

PHP:
move_uploaded_file($filetmp, $updir.$filename);
Du solltest prüfen ob move_uploaded_file() auch erfolgreich gewesen ist, denn wenn safe_mode aktiviert ist könnte selbiges Dir einen Strich durch die Rechnung machen.

PHP:
if (filesize($updir.$filename)<1) die ('Sie haben versucht eine leerer Datei hochzuladen!');
Dir ist aber schon klar dass ein Bild min. einen Header hat?
Es kann also garnicht kleiner als 1 Byte sein.
Sinnvoller wäre es zu prüfen ob es dem von Dir gewünschtem Mime-Type enspricht (für .jpg ist es, je nach verwendetem Browser, entweder image/jpeg oder image/pjpeg).
Wenn ja, dann hat es natürlich auch über 0 Byte.

PHP:
<form method="post" action="<? $PHP_SELF ?>" enctype="multipart/form-data">
Hast Du die Variable "$PHP_SELF" auch irgendwo definiert?
Und was soll mit dieser Variable passieren?
Soll sie zufälligerweise das action-Attribut füllen? Dann solltest Du es dem Script auch mitteilen, z.b. mit einem "echo".
Ausserdem funktioniert "<?" nur wenn in der php.ini "short_open_tag" aktiviert ist.
Nutze statt dessen lieber "<?php", denn dieses funktioniert unabhängig davon was für short_open_tag in der php.ini eingestellt ist.

Eure obigen Hinweise bringen folgende Fehler an den Bildschirm:
Entweder findet erst garkeine Prüfung des Formulars (s.o.) statt und/oder das Formular kommt nicht bzw. nicht wie gewünscht an.

Gruss Dr Dau
 
Hi!
Zumindest geht aus dem Code nicht hervor ob Du überhaupt prüfst dass das Formular abgeschickt wurde und ob die Input-Felder gefüllt sind.
korrekt, habe ich weggelassen da es in diesem Zusammenhang nicht benötigt wird...

Dir ist aber schon klar dass ein Bild min. einen Header hat?
Es kann also garnicht kleiner als 1 Byte sein.
Sinnvoller wäre es zu prüfen ob es dem von Dir gewünschtem Mime-Type enspricht (für .jpg ist es, je nach verwendetem Browser, entweder image/jpeg oder image/pjpeg).
Wenn ja, dann hat es natürlich auch über 0 Byte.
Gutes Argument, das werde ich umbauen.


Entweder findet erst garkeine Prüfung des Formulars (s.o.) statt und/oder das Formular kommt nicht bzw. nicht wie gewünscht an.
jo - sag ich ja. Ich habe jetzt zum Test vor dem move_uploaded_file noch eine echo Ausgabe der Variablen $_FILES angelegt, die Variablen bleiben dabei leer. Also kommt nach dem Absenden des Formulars keine Datei an die weiterverarbeitet werden könnte, nur warum!?
 
Lege mal eine neue Datei mit folgendem Inhalt an und schaue was passiert:
PHP:
<?php
ini_set("display_errors", "on");
error_reporting(E_ALL);

if(isset($_POST["submitbutton"])) {
    echo "<pre>";
    var_dump($_POST);
    var_dump($_FILES);
    echo "</pre>";
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"] ?>" enctype="multipart/form-data"> 
    <input type="file" name="file">
    <input type="submit" name="submitbutton" value="abschicken...">
</form>

[edit]
Und nehme zum testen nur eine ganz kleine Datei.
Z.b. eine Textdatei mit einem einzigen Wort als Inhalt.
[/edit]
 
Zuletzt bearbeitet:
Zurück