Bilddatei in DB laden-> Problem mit fopen();/require_once

Davicito

Erfahrenes Mitglied
Hallo, ich hoffe ich hab jetzt das richtige Forum für mein Problemchen getroffen.

Ich habe mir folgenden Code-Schnipsel gebastelt, um ein Foto in meine Datenbank zu laden.

PHP:
//------- Geladene Datei Prüfen und in die MySQL-Datenbank updaten -----	
	//übergebe eine Datei
	$dateityp = GetImageSize($_FILES['datei']['tmp_name']);
	//Prüfe ob die Datei ein Bild ist (1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF)
	if($dateityp[2] != 0 && array_key_exists('datei',$_FILES))
	{	
	   // Prüfe die Dateigröße
	   if($_FILES['datei']['size'] <=  204800)
	   {
	 	//Verschieb ein Datei an einen anderen Ort, auf der Festplatte
		move_uploaded_file($_FILES['datei']['tmp_name'], 
                               "Profilefotos/".$_FILES['datei']['name']);
								
		//require_once 'connect.inc.php';
							
		$datei = fopen($_FILES['datei']['tmp_name'],'r'); 
		$datei_for_db = addslashes(fread($datei, $_FILES['datei']['size'])); 		
		//fclose($datei);
						
		mysql_query("UPDATE
						mitarbeiter 
					SET 
						Profilfoto = '".$datei_for_db."',
						ProfilfotoMetaInfo = '".$_FILES['datei']['type']."'
					WHERE
						Personal_ID = ".$tmpID."
					") OR die('Bildübertragungsfehler: '.mysql_error());
	  }
	  else echo "Das Bild darf nicht größer als 200 kb sein ";      				
	}
	else echo "Bitte nur Bilder im Gif bzw. jpg Format hochladen";

Formular:
PHP:
...
echo'<form name="formid" action="... .php" method="post" 
				 enctype="multipart/form-data" onsubmit="return checkPersonalien();">';	
........
// Eingabe für eine Datei
echo'<span >';
	echo'<fieldset><legend>Profielfoto</legend>';
		echo'<br><input type="file" name="datei"><br>';					
	echo'</fieldset>';
echo'</span>';
........
echo'<span>
		<input type="submit" name="anlegen" value="Anlegen">
	</span>';
echo'</form>';

Nur leider wenn ich das Formular abschicke, bekomme ich folgende Meldungen:

Warning: fopen(C:\xampp\tmp\php76B5.tmp): failed to open stream: No such file or directory in C:\xampp\htdocs\MA-Eingabe.php on line 355

Warning: fread() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\MA-Eingabe.php on line 356

Ich hab dann natürlich auch intensiv mal geschaut woran das liegt, aber ich finde den Fehler nicht!!
Es wird ja auch immer gesagt, das es an der Berechtigung von C:\xampp\tmp\php76B5.tmp liegt und ich mit chmod 777 Lese & Schreibrechte vergebe. Aber erstens arbeite ich unter Windows und nicht unter linux und habe daher die Schreibrechte global am Xampp-Ordner direkt, also auch für dessen Unterordner, global definiert.

Bin bei meiner Suche, über Google, auf
PHP:
 require_once 'connect.inc.php';
gestoßen und versucht, bekomme aber die Meldung:
Warning: require_once(connect.inc.php): failed to open stream: No such file or directory in C:\xampp\htdocs\MA-Eingabe.php on line 353

Fatal error: require_once(): Failed opening required 'connect.inc.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\MA-Eingabe.php on line 353.

Also weiß absolutly nicht weiter und hoffe da auf Euro Unterstützung bei mein Problem. Vielleicht hat ja schon jemand von Euch das selbe Problem gehabt und weiß, wie mir zu helfen ist.

Liebe Grüße.
 
Zuletzt bearbeitet:
ja... das war nur mal zu Testzwecken gedacht.... aber die Datei befindet sich auch weiterhin auf dem Ursprungspfad -> es wird nur eine Kopie erstellt und verschoben.
Oder was meintest Du? -> Du kannst dir auch move_uploaded_file(); auskommentiert vorstellen ^^.

Gruß
 
Zuletzt bearbeitet:
Korrektur... Ja jetzt verstehe ich auch was du meinst... ich hab selber mal den move_uploaded_file(); Auskommentiert, und sehe da. es funktioniert! Aber dann schließe ich darauf, das move_uploaded_file(); das Bild bzw. Datei vorher schon ausließt und für alle weiteren Funktionen nicht mehr zur Verfügung steht... oder wie verstehe ich das jetzt? ich mach mich auch mal schlau.

LG
 
http://php.net/manual/de/function.move-uploaded-file.php

Diese Funktion prüft, ob die mit filename bezeichnete Datei eine gültige Upload-Datei ist. Ist die Datei gültig, wird sie zum in destination bezeichneten Dateinamen verschoben. Wenn filename keine gültige Datei ist, wird keine Aktion ausgeführt, und move_uploaded_file() gibt FALSE zurück. Wenn filename eine gültige Datei ist, jedoch aus irgendeinem Grund nicht verschoben werden kann, wird keine Aktion ausgeführt, und move_uploaded_file() gibt FALSE zurück. Zusätzlich wird eine Warnung ausgegeben.

Diese Prüfung ist speziell dort interessant, wo irgendeine Aktion mit upgeloadeten Dateien deren Inhalt dem User zugänglich machen könnte (oder auch anderen Usern auf dem selben System).
 
Aber dann schließe ich darauf, das move_uploaded_file(); das Bild bzw. Datei vorher schon ausließt und für alle weiteren Funktionen nicht mehr zur Verfügung steht... oder wie verstehe ich das jetzt?

Sagt ja schon der Name der Funktion "MOVE" heißt verschieben/bewegen. Ist doch klar, das die Datei nach Ausführung dieser Funktion am ursprünglichen Ort nicht mehr zu finden sondern an dem Pfad, der als zweiter Parameter an die Funktion übergeben wurde.

PHP:
$quelle = $_FILES['datei']['tmp_name'];
$ziel = "Profilefotos/".$_FILES['datei']['name'];

if( ! move_uploaded_file($quelle, $ziel) )
{
  die("Verschieben der hochgeladenen Temporär-Datei fehlgeschlagen...");
}

$datei = fopen($ziel, 'r');  
if ( ! $datei )
{
  die("Konnte " . $ziel . " nicht zum lesen öffnen!");
}

...

Ich hoffe jetzt ist klar, was move_uploaded_file() macht. Bisschen Handbuch lesen kann auch nicht schaden: http://de.php.net/manual/de/function.move-uploaded-file.php
 
Zurück