Move_uploaded_file() liefert TRUE zurück, Datei ist trozdem nicht im Verzeichnis

Bobo2040

Mitglied
Hi :)

Ich habe nen kleines Upload-Script geschrieben aber aus irgendeinem Grund läuft es nicht richtig...
Also es Move_uploaded_file() Liefert zwar ein TRUE zurück jedoch wird die Datei nicht im Verzeichnis gespeichert..Ich habe es bis jetzt nur am PC und nicht aufm Server getestet..muss ich dazu die Dateiberechtigung ändern?(chmod ...) ich benutze XAMPP wenns auf der Website ist dann ist das klar das ich die ändern muss :D Nur muss ich die bei XAMPP auch ändern und wenn ja wie? :O
Hier mein Script:
PHP:
<?php
/*
Upload
*/
session_start();
/*
Include the Libarys
*/
define( 'DB_HOST', 'localhost' ); // set database host
define( 'DB_USER', 'root' ); // set database user
define( 'DB_PASS', '' ); // set database password
define( 'DB_NAME', 'script-bazar' ); // set database name
define( 'SEND_ERRORS_TO', 'zensiert' ); //set email notification email address
define( 'DISPLAY_DEBUG', true ); //display db errors?
/*
Classen
*/
include_once("lib/MySqli.class.php");

$DB = new DB();

/*
Hauptscript
*/
If(isset($_POST['uploadsub'])) {
    unset($_POST['uploadsub']);
    $titel = $_POST['titel'];
    $description = $_POST['description'];
    $preis = $_POST['preis'];
 
    $default_titel = "Script Name";
    $default_desc = "Maximal 400 Zeichen...";
 
    if(empty($titel) OR empty($description) OR !is_numeric($preis) OR $description == $default_desc OR $titel == $default_titel) {
        $_SESSION['uploadError'] = "Alle Felder müssen richtig ausgefüllt sein!";
        //$_SESSION['uploadError'] = "<br />$titel <br />$default_titel<br />$preis<br />is_numeric($preis) <br />$description<br />$default_desc<br />";
    }else{
        //Weitermachen...
        $file_name = $_FILES['script']['name'];
        $file_size = $_FILES['script']['size'];
        $file_temp = $_FILES['script']['tmp_name'];
        $file_type = $_FILES['script']['type'];
     
        $random = rand(0,10000); //Zufallswert..
        $url = "../../scripts/" . $DB->filter($file_name);
     
        $allowed = array(
                    1 => "application/zip",
                    2 => "application/x-zip-compressed",
                    3 => "multipart/x-zip",
                    4 => "application/x-compressed",
                    5 => "application/x-rar-compressed",
                    6 => "application/octet-stream",
                );
     
        $count = 0;
     
        for($i=0;$i++;$i=7) {
            If($file_type == $allowed[$i]) {
                $count = $count+1;
            }
        }
     
        If($count=0) {
            //Kein Type Stimmt überein -> Falsche Dateiendung!
            $_SESSION['uploadError'] = "Falscher Dateityp, nur " . $HTML->Bold(".zip") . "/" . $HTML->Bold(".rar") . "-Dateien erlaubt!";
        }else{
            $size =  2097152 * 16; //ca. 32MB
            //Datei-Größe überprüfen
            If($file_size > $size) {
                //Datei ist zu Groß
                $_SESSION['uploadError'] = "Dateigröße ist auf 32MB begrenzt! Bitte Kontaktiere den Support!";
            }else{
                //Datei ist nicht zu Groß :)
                //Weitermachen..
                $upload = move_uploaded_file($file_temp,$url);
                if(!$upload) {
                    $_SESSION['uploadError'] = "Konnte aufgrund eines Serverfehlers nicht hochgeladen werden!";
                }else{
                    $_SESSION['uploadError'] = "Dein Script wurde erfolgreich hochgeladen! :)";
                }
                //Query und alles Abspeichern...
                $timestamp = time();
             
                $insert = array(
                            'preis' => $preis,
                            'autor' => $_SESSION['username'],
                            'download' => 0,
                            'datum' => date("d.m.Y",$timestamp),
                            'location' => $url,
                            'size' => $file_size/1000,
                            'title' => $titel,
                            'description' => $description
                        );
                     
                $result = $DB->insert("scripts",$insert);
             
                //Userdaten Aktualisieren...
                $query = "SELECT my_scripts FROM `users` WHERE username='" . $_SESSION['username'] . "' LIMIT 1";
                $result2 = $DB->get_results($query);
             
                foreach($result2 as $row) {
                    $my_scripts = $row['my_scripts'];
                }
                //Script ID laden..
                $query = "SELECT id FROM `scripts` ORDER BY id DESC LIMIT 1";
                $result4 = $DB->get_results($query);
                if(!$result4) {
                    $_SESSION['uploadError'] = "Fehler beim hashen der ID.";
                }else{
                    foreach($result4 as $row4) {
                        $id = $row4['id'];
                    }
                }
             
                If(!empty($my_scripts)) {
                    $my_scripts .= "|" . $id;
                }else{
                    $my_scripts = $id;
                }
             
                $update = array(
                            'my_scripts' => $my_scripts
                        );
                     
                $where = array(
                            'username' => $_SESSION['username']
                        );
                     
                $result3 = $DB->update("users",$update,$where,1);
                If(!$result2 OR !$result3) {
                    $_SESSION['uploadError'] = "Fehler beim Abspeichern";
                }else{
                    $_SESSION['uploadError'] = "Erfolgreich Hochgeladen!";
                }
             
                If(!$result) {
                    $_SESSION['uploadError'] = "Fehler beim Abspeichern!";
                }else {
                    $_SESSION['uploadError'] = "Erfolgreich Hochgeladen!";
                }
            }
        }
    }
    //Weiterleiten
    //Header("Location: ../../index.php?page=sell");
    //exit();
}
?>

Kann jemand das in Code Tags editieren? Wenn ich auf Code einfügen gehe, dann passiert garnix ... Erledigt —ComFreek

Mfg
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

du prüfst ja gar nicht auf Fehler mittels $_FILES['...']['error']. Laut PHP-Dokumentation gibt es nur zwei Fälle, in denen move_uploaded_file FALSE zurückgibt: http://de2.php.net/move_uploaded_file:

php.net hat gesagt.:
Returns TRUE on success.

If filename is not a valid upload file, then no action will occur, and move_uploaded_file() will return FALSE.

If filename is a valid upload file, but cannot be moved for some reason, no action will occur, and move_uploaded_file() will return FALSE. Additionally, a warning will be issued.
Den ersten Fall kannst du per $_FILES['...']['error'] ausschließen.
Beim zweiten Fall müsstest du eine Warnung erhalten, sofern du das Melden der Warnungen (error_reporting) angeschaltet hast. Dann wirst du im PHP-Log eine Meldung sehen. Wenn du die Warnung auf der Seite sehen möchtest, musst du auch das Anzeigen der Warnungen eingeschaltet haben (display_errors).
 
Okay danke erstmal für die schnelle Antwort! :)

Habe mit
echo $_FILES['script']['error'];
1 als Rückgabewert bekommen ..
Nach einer kurzen suche kam ich auf den Grund des Fehlers:
Zitat: php.net/manual/
Die hochgeladene Datei überschreitet die in der Anweisung upload_max_filesize inphp.ini festgelegte Größe.

So nur habe ich keine Ahnung was die php.ini ist oder wo ich den enthaltenen Wert ändern kann..die Datei die ich getestet hatte hat eine größe von ca.6mb mit dem Hidden Input vor dem File-Input Feld habe ich die upload_max_filesize auf ca32Mb festgelegt ...
Ich stehe grade ein bisschen aufm Schlauch wie ich das jetzt lösen kann ...
:)

Mein Hidden Feld:
echo "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"" . 2097152 * 16 . "\" />";

Kann mir jemand helfen? auch wenn ich eine 1Kb kleine .zip Datei Hochladen will funktioniert es nicht..
Mfg
 
So nur habe ich keine Ahnung was die php.ini ist oder wo ich den enthaltenen Wert ändern kann.
Google? Tut mir leid, aber man braucht wirklich nicht wiederholen, was auf Millionen von anderen Seiten auch steht.

Es ist egal, was du beim File-Input festlegst, wenn der Server (bzw. PHP) eine niedrigere Grenze hat.
 

Neue Beiträge

Zurück