"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[PHP] Probleme bei move_uploaded_file

bambooS 10.03.2009 - 23:29 1502 13
Posts

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Hi Leute,

ich habe das Problem, dass mein move_uploaded_file nicht wirklich funktioniert.

Zuerst hole ich mir die Daten:
Code: PHP
echo "<tr>\n";
echo "	<td colspan='4' style='text-align:right;'><b>Bild </b> (opt. 100x100px, max. 50K):";
echo "<input type='hidden' name='MAX_FILE_SIZE' value='50000'>";
echo "<input type='file' name='bild" . $i . "' size='30' accept='image/jpg jpeg' maxlength='50000' ><br>\n";
echo "<input type='hidden' name='MAX_FILE_SIZE' value='100000'><b>Bild </b>(groß, max. 100K):";
echo "<input type='file' name='bild_big" . $i . "' size='30' accept='image/jpg jpeg' maxlength='100000' >\n";
echo "</td>\n";
echo "</tr>\n";

Wenn dann der Button Speichern geklickt wird, wird folgende Funktion aufgerufen:
Code: PHP
FileUpload($_FILES["bild" . $i], 50000, "../images/players/", $ID, 0);
FileUpload($_FILES["bild_big" . $i], 100000, "../images/players/", $ID, 1);

Die Funktion selbst sieht so aus:
Code: PHP
	//----------------------------------------------
function FileUpload($file, $size, $path, $ID, $kind) 
//----------------------------------------------
{ 
if( !empty( $file["name"] ) )
{ 
if( $file["error"] == UPLOAD_ERR_INI_SIZE || $file["error"] == UPLOAD_ERR_FORM_SIZE )
{ 
echo "Die Datei " . $file["name"] . " wure nicht gespeichert. Die maximale Dateigröße beträgt " . $size . " Byte.<br>\n";
return;
}

$pieces = explode('.', $file["name"]);
$type = strtolower( $pieces[sizeof($pieces) - 1] );

if( $type != "jpg" && $type != "jpeg" && $type != "gif" && $kind != 3 && $kind != 4) 
{ 
echo "Die Datei \"" . $file["name"] . "\" wure nicht gespeichert. Es können nur jpg/jpeg Dateien hochgeladen werden.<br>\n";
return;
} 
if($file["size"] > $size)
{ 
echo "Die Datei " . $file["name"] . " wure nicht gespeichert. Die maximale Dateigröße beträgt " . $size . " Byte.<br>\n";
return;
} 
switch($kind) 
{ 
//Spieler 
case 0: 
$fileName = $path . $ID . ".jpg"; 					break; 				
//Spieler groß 
case 1: 
$fileName = $path . $ID . "_big.jpg"; 
break; 
//Teambild 
case 2: 
$fileName = $path . $ID . "_team.jpg"; 
break; 
//Logo
case 3:
$fileName = $path . $ID . "_logo.";
if($type == "gif")	$fileName .= "gif";
else
$fileName .= "jpg";
break;
//Logo klein
case 4:
$fileName = $path . $ID . "_logo_small.";
if($type == "gif")
$fileName .= "gif";
else
$fileName .= "jpg";
break;
} 
			 			
if( !move_uploaded_file($file["tmp_name"], $fileName) ) 
echo "Fehler beim Uploaden von " . $file["name"];
} 
}

Das Problem äußert sich so, dass ich zwar keinerlei Fehlermeldung bekomme, aber es werden auch die Bilder nicht hochgeladen.

Ich hab auch schon geschaut, dass die Rechte der Ordner auf chmod 777 gesetzt sind.

Ich weiß nicht mehr weiter und würde um Rat bieten.

Danke

lg
bam

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Ich würde mal einen parser error vermuten - hast du error_reporting(E_ALL) gesetzt in der php.ini?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
Sind die Dateien im $_FILES-Array? Wenn nicht dann hast du beim form-Tag das enctype="multipart/form-data" vergessen.

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
@watchout
Ich hab in meiner config.php die immer mitgeladen wird, folgendes stehen: error_reporting(1). Serverseitig ist folgendes eingestellt: error_reporting (6135). Den Wert kann ich aber nicht ändern.

@mat
Das enctype="multipart/form-data" ist bei mir im form-Tag gesetzt.

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
Setz im config.php mal folgende Zeilen statt dem error_reporting() rein:

Code:
error_reporting(E_ALL);
ini_set("display_errors", TRUE);

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
wenn ich ich die Befehle in meine config.php reinschreibe und dann versuche die Bilder hochzuladen, passiert nix.

Soll heißen, ich klick auf Speichern und es kommt weder eine Fehlermeldung noch wird das Fenster neugeladen (mit den aktuellen Infos dann drinnen...).

Spikx

My Little Pwny
Avatar
Registered: Jan 2002
Location: Scotland
Posts: 13504
Zitat von bambooS
wenn ich ich die Befehle in meine config.php reinschreibe und dann versuche die Bilder hochzuladen, passiert nix.

Soll heißen, ich klick auf Speichern und es kommt weder eine Fehlermeldung noch wird das Fenster neugeladen (mit den aktuellen Infos dann drinnen...).
Dann passiert definitiv ein Fehler, der aber nicht angezeigt wird.

jives

And the science gets done
Avatar
Registered: Sep 2001
Location: Baden
Posts: 3548
Poste bitte mal das gesamte Upload-Formular. So wie ich das verstehe, liegt eher da der Hund begraben (wenn sich nach dem Klick auf den Button gar nichts tut). Zusätzlich könntest du auch in die FileUpload-Funktion ganz oben ein var_dump($file) einfügen, um zu schauen ob überhaupt was sinnvolles übergeben wird.

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Hab ich mir schon fast gedacht ;).

Nur finde ich ihn leider nicht. Oder noch besser: ich seh den Fehler einfach nicht.

Für mich wäre der Code richtig.

Deswegen frage ich hier nach, ob jmd von euch den Fehler erkennt.

Hilfts wenn ich den kompletten Code rauflade?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
phpinfo() wäre auch praktisch.

Du kannst aber jederzeit einen eigenen Error-Handler schreiben, der dir per echo einfach nur den Fehler ausgibt.

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Hier mal die PHP Info: Klick mich

Der Code ist im Anhang.

Einen eigenen Errorhandler zu bauen ist natürlich ein guter Vorschlag, nur bin ich nicht der Programmierer. Die Seite habe ich übernommen und jede Änderung die ich im Code mache bzw. nach Fehlern suche ist, linde gesagt, Schwerstarbeit für mich.

Vielleicht findet jmd den Fehler, denn ich übersehe.
Ansonsten muss ich diese Funktionalität rausnehmen und es irgendwie anders lösen.

lg
new_138397.txt (downloaded 89x)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Das Problem ist dass parse-errors nicht angezeigt werden, selbst wenn error_reporting(E_ALL) aufgerufen wird (deshalb hab ich auch gefragt ob er in php.ini so eingestellt hat)

Das lässt sich aber durch einen wrapper umgehen:
Code: PHP
error_reporting(E_ALL);
include("upload.php");
So wird zuerst error_reporting auf einen sinnvollen wert gesetzt und dann included, geparsed und php merkt - huch parse error ;)

bambooS

OC Addicted
Avatar
Registered: Oct 2005
Location: Vienna
Posts: 672
Hab das Ganze mal in den Code integriert.

Folgende Fehler erhalte ich:
Code: PHP
Warning: include(upload.php) [function.include]: failed to open stream: No such file or directory in /home/funhoop/public_html/forms/kaderEdit.php on line 4
Warning: include(upload.php) [function.include]: failed to open stream: No such file or directory in /home/funhoop/public_html/forms/kaderEdit.php on line 4
Warning: include() [function.include]: Failed opening 'upload.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/funhoop/public_html/forms/kaderEdit.php on line 4

Jedoch wenn ich auf speichern klicke, erscheint kein Fehler...

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Folgende Erklärung bringt in deinem Fall zwar nichts, weil lt. phpinfo hast du ja compiler warnings aktiviert, der Vollständigkeit halber schreib ich sie aber dazu:
Zitat
ähm... "upload.php" war nur symbolisch gemeint da ich ja nicht weiss wie dein file heisst.

Nach der Fehlermeldung vermute ich dass es kaderEdit.php heisst, also machst du ein neues file - zB. kaderEditWrapper.php, das enthält den code

Code: PHP
error_reporting(E_ALL);
include("kaderEdit.php");

und statt kaderEdit.php rufst du kaderEditWrapper.php im browser auf. Dann werden parse-errors in fast jeder Konfiguration angezeigt.

Zu deinem immer noch existierenden Problem - Das ist sicher lösbar, doch hier übers Forum... imho nicht - oder es dauert ewig.
Außer da sieht jetzt jemand von den anderen auf Anhieb das Problem, solltest du dir also wen suchen der hands-on das Teil mal durchtesten kann, dann wird sich der Fehler schon zeigen.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz