Problem mit move_uploaded_file()

kevkev

Erfahrenes Mitglied
Hi,

Ich hab ein komisches Problem mit move_uploaded_file():
Wenn Ich eine Datei verschiebe, und den Dateinamen direkt in die Funktion reinschreibe, funktioniert es:
PHP:
move_uploaded_file($_FILES['img']['tmp_name'], "./tmp/".$_FILES['img']['name']);

Aber jedoch nicht so:
PHP:
$new_file_name = rand(1,10).$_FILES['img']['name'];
move_uploaded_file($_FILES['img']['tmp_name'], "./tmp/".$new_file_name);

So kopiert er mir die Datei nicht, aber auch enn error kommt nicht.
Auch wenn Ich den Befehl in ne If Abfrage reinlege, kommt True raus, aber es wird definitiv nicht kopiert!

Wenn Ich jedoch das so mache:
PHP:
$new_file_name = "jesus";
move_uploaded_file($_FILES['img']['tmp_name'], "./tmp/".$new_file_name);

Dann kopiert er mir wieder die Datei?!
Ist mein Script viell. religiös, oder warum nimmt er das obere mit rand() nicht an?

Mit anderen Namen geht es auch, aber manchmal kopiert er die Datei und manchmal einfach nicht, aber Ich weiß nicht warum :(.
Es kommt jedoch immer True raus :suspekt:

Die Datei ist komischerweise immer die Selbe die kopiert wird, aber auch mit anderen spackt es rum!

Hilfe :( !

Gruß Kevin
 
Probier mal Folgendes:
PHP:
move_uploaded_file($_FILES['img']['tmp_name'], './tmp/'.rand(1,10).$_FILES['img']['name'])
 
Hi,

@Sven Mintel:
Ja Ich werd noch zum Hirsch, das gibts doch nicht

@Gumbo:
Das bringt mir leider nichts, da Ich später auf den Dateinamen noch zugreifen muss.

Ich bring hier mal den komplett Mist:
PHP:
		$new_file_name = "gott";
	
		if (!file_exists("./tmp/")) {
	 	   mkdir("./tmp/");
		}

	    if (move_uploaded_file($_FILES['img']['tmp_name'], "./tmp/".$new_file_name)) {
			if (in_array($_FILES['img']['type'], $mime_types)) {
				$imagesize = getimagesize("./tmp/".$new_file_name);
			    if ($imagesize[0]<$config['img_max_width'] AND $imagesize[1]<$config['img_max_height']) {
			        if ($_FILES['img']['size']<$config['img_max_size']) {
			            echo info_box("ok", "Bild erfolgreich hochgeladen");
						copy("./tmp/".$new_file_name, "./img/user_pics/".$new_file_name);
			        } else {
						echo info_box("error", "Die Dateigröße ist hoch.");
						@unlink("./tmp/".$new_file_name);
					}
			    } else {
					echo info_box("error", "Die Maße des Bildes sind zu groß.");
					@unlink("./tmp/".$new_file_name);
				}
			} else {
				echo info_box("error", "Unerlaubter Dateityp.");
				@unlink("./tmp/".$new_file_name);
			}
	    }
	}

Fehler am Script kann Ich keine erkennen.
Mit dem Dateinamen "gott" überprüft er alles und macht auch alles.
Aber bei anderen Dateinamen irgendwie nicht :(!

Edit:
Auch wenn Ich den Ordner mit 0777 oder 777 erstelle, macht ers nicht.

Gruß Kevin
 
Zuletzt bearbeitet:
PHP:
<?php

	$errors = array();

	$destDir = './temp/';
	$filename = rand(1,10).$_FILES['img']['name']);

	if( $_FILES['img']['size'] > $config['img_max_size'] ) {
		$_FILES['img']['error'] = UPLOAD_ERR_INI_SIZE;
	}

	switch( $_FILES['img']['error'] ) {
		case UPLOAD_ERR_INI_SIZE:
		case UPLOAD_ERR_FORM_SIZE:
			$errors[] = 'Die hochgeladene Datei überschreitet die erlaubte maximale Dateigröße von '.$config['img_max_size'].' Bytes!';
			break;
		case UPLOAD_ERR_PARTIAL:
			$errors[] = 'Die Datei wurde nur teilweise hochgeladen!';
			break;
		case UPLOAD_ERR_NO_FILE:
			$errors[] = 'Es wurde keine Datei hochgeladen.'
			break;
	}

	if( empty($errors) ) {
		if( !in_array($_FILES['img']['type'], $mime_types) ) {
			$errors[] = 'Der Dateityp entspricht nicht einem der erlaubten Typen!';
		}
		$imagesize = getimagesize($_FILES['img']['tmp_name']);
		if( $imagesize[0] > $config['img_max_width'] || $imagesize[1] > $config['img_max_height'] ) {
			$errors[] = 'Die Dimensionen der Grafik überschreiten die erlaubten maximalen Dimensionen von '.$config['img_max_width'].'×'.$config['img_max_height'].' Pixel!';
		}
	}

	if( empty($errors) ) {
		if( !move_uploaded_file($_FILES['img']['tmp_name'], $destDir.$filename) ) {
			$errors[] = 'Die Grafikdatei konnte nicht verschoben werden!';
		}
	}

	if( !empty($errors) ) {
		echo '<div class="note error"><ul>';
		foreach( $errors as $error ) {
			echo '<li>'.$error.'</li>';
		}
		echo '</ul></div>';
	} else {
		echo 'Datei wurde erfolgreich hochgeladen.';
	}

?>
 
Hi,

Danke :)!

Aber er bringt kopiert mir immer noch Fehler:
Code:
Warning: getimagesize(./temp/3image_fmbg_0_7.jpg): failed to open stream: No such file or directory in C:\Programme\xampp\htdocs\projekte\wolff\wolff\garantie\user.2\user_account\bild_upload.php on line 67
Datei wurde erfolgreich hochgeladen.

Auch die Datei wurde nicht kopiert.

Gruß Kevin
 
Hi,

Falls du die Parse Fehler meinst, die hab Ich schon behoben.
Aber warte, Ich teste das nochmal.

Edit:
Jetzt bringt er keinen Fehler mehr, aber kopiert wird die Datei leider trotzdem noch nicht :(!

gruß kevin
 
Zuletzt bearbeitet:
und wie schauts so aus:
PHP:
$new_file_name = $_SERVER['DOCUMENT_ROOT']."/tmp/".rand(1,10).$_FILES['img']['name'];

dürfte zwar eigentlich keinen unterschied machen, aber vielleicht mag das system auf dem du dein script testest das "./xxx" nicht...

du kannst ja, wenn du new_file_name noch später brauchst (und zawr ohne den absoluten pfad) erstmal den random wert festlegen ($rand = rand(1,10)) und den dann auch in new_file_path verwenden
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück