PHP Upload Problem

Consti

Erfahrenes Mitglied
Hab mir einen relativ einfachen PHP Uploader aus dem Netz gezogen und ihn zuhause auf meinem Server installiert. Bin eigentlich auch ganz zu frieden. Kleine Bilder, Dokumente, etc. (Klein < ~2MB) klappen ohne Probleme. Falls ein Bild, etc. grösser als ca 2. MB wird, kommt eine Fehlermeldung, dabei ist es egal, ob es eine mp3 oder ein Bild ist.

Hier ist der Code, zur nähere erläuterung

PHP:
<?php

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://www.consti-net.ipactive.de".$_SERVER[''].dirname($_SERVER['PHP_SELF']);
$url_this =  "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$upload_dir = "files/";
$upload_url = $url_dir."/files/";
$message ="";

//create files directory if not exist
//If it does not work, create on your own and change permission.
if (!is_dir("files")) {
	die ("Das Verzeichnis Files exisitiert nicht");
}

if ($_FILES['userfile']) {
	$message = do_upload($upload_dir, $upload_url);
}
else {
	$message = "Ungültige Datei ausgewählt.";
}

print $message;

function do_upload($upload_dir, $upload_url) {

	$temp_name = $_FILES['userfile']['tmp_name'];
	$file_name = $_FILES['userfile']['name']; 
	$file_type = $_FILES['userfile']['type']; 
	$file_size = $_FILES['userfile']['size']; 
	$result    = $_FILES['userfile']['error'];
	$file_url  = $upload_url.$file_name;
	$file_path = $upload_dir.$file_name;

	//File Name Check
    if ( $file_name =="") { 
    	$message = "Ungültiger Dateiname";
    	return $message;
    }
    //File Size Check
    else if ( $file_size > 10485760) {
        $message = "Die Datei ist größer als 10 MB.";
        return $message;
    }

    $result  =  move_uploaded_file($temp_name, $file_path);
    $message = ($result)?"URL der Datei <a href=$file_url>$file_url</a>" :
    	      "Beim Hochladen der Datei ist ein Fehler aufgetreten.";

    return $message;
}
?>

<form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
	Datei hochladen <input type="file" id="userfile" name="userfile">
<input type="submit" name="upload" value="Datei Hochladen">
</form>

Der Fehler kann meines Wissens nach nicht bei der Dateigrösse liegen. Ich habe 10 MB Extra mit einem Webumrechner in Bytes umgerechnet und dor eingetragen.
Dateiendungen sind dem Script eh egal.
Als Fehlermledung kommt dann

"Beim Hochladen der Datei ist ein Fehler aufgetreten."

siehe auf Script!

Was kann ich machen, bzw. wo liegt der Fehler? Ich kann eigentlich kein PHP - doch ein paar Abläufe kann ich noch aus anderen Sprachen erkennen!
Würde mich über eine Antwort freuen!
 
Das liegt daran, dass in der PHP.INI der Parameter upload_max_filesize standardmäßig auf 2 MB steht. Das sollter der primäre Grund für Dein Problem sein.
Des Weiteren gibt es noch einen zweiten Parameter: post_max_size. Der steht standardmäßig auf 8MB. Solltest Du upload_max_file_size auf über 8 MB ändern, musst Du post_max_size auch erhöhen.

snuu
 
Danke, genau da wird der Fehler gelegen haben - jetzt geht alles...

War aber doch ein wenig kompliziert:

Hab den Server auf Win2000 laufen (ja sry, ich weiss... ;)) und hab minixampp genommen, da es am einfachsten war - nun gab es aber 2 php.ini - bis ich das mal rausgefunden habe, hats schon etwas gedauert ;)

Nun hab ich beide geänder - Anmerkung: es stand da 2M und 8M und nicht 2MB und 8MB) war ein wenig verwirrend, aber nun gehts!

Thx alot
 
lol, naja, komisch, genau die hab ich nicht geändert - aber es klappt trotzdem, und werde sie dann nachträglich nicht mehr ändern, läuft ja alles ;)
 
Hallo,

ich habe mir den Code der Uploadfunktion (oben im ersten Post) kopiert und etwas verändert. Das funktioniert auch alles wunderbar.

Ich möchte jedoch den Dateinamen beim Upload in einen vorgegebenen ("security.sec") umbenennen. Kann mir einer sagen wo ich den Namen, unter dem die hochgeladene Datei gespeichert werden soll, ändern kann? Ich vermute es müsste hier

PHP:
$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
$file_type = $_FILES['userfile']['type'];
$file_size = $_FILES['userfile']['size'];
$result    = $_FILES['userfile']['error'];
$file_url  = $upload_url.$file_name;
$file_path = $upload_dir.$file_name;

geändert werden, aber ich versteh diesen Teil der Funktion nicht.
 
Hallo Olly-inno,

bei den zweiten Wert von move_uploaded_file Handelt es sich um den neuen Dateinamen und Pfad.
Da dies Vorher in der Variablie $file_path Definiert wird kanst du das da ändern.

Also wenn die Datei z.B. wie du gesagt hast als "security.sec" Gespeichert werden soll gibts du Einfach statt:
PHP:
$file_path = $upload_dir.$file_name;
Den Dateinamen mit an den du haben willst:
PHP:
$file_path = $upload_dir."security.sec";

mfg Andreas
 
Hallo zusammen,

ich habe jetzt das Uploadskript in einer Sessionverwaltung laufen. DIe Session wird dabei immer an den Pfad angefuegt, z.B. "http://172.16.103.12/dfm/homeAdmin.php?ID=6cc38c1ac0fcf8b59598c34c2c94990d".

Wie ich festgestellt habe, läuft das Uploadskript nicht mehr. Ich vermute mal, dass die Session auch hier mit angehängt werden muss.

$site_name = $_SERVER['HTTP_HOST'];
$url_dir = "http://172.16.103.12/DFM".$_SERVER[''].dirname($_SERVER['PHP_SELF']);
$url_this = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

$upload_dir = "upload/";
$upload_url = $url_dir."/upload/";

Während ich bei den anderen Verlinkungen "."?ID=".$_GET[ID]" dahinter gehängt habe, funktioniert das hierbei nicht so richtig. Hat jemand ne Idee woran es liegen kann? Steht die Session vielleicht an der falschen Stelle?

MfG

Olly

PS: Plattform ist zwangsweise der IIS unter Win2003 Server mit PHP Version 4.x.
 
Zuletzt bearbeitet:
Zurück