dateityp check erst nach upload?

  • Themenstarter Themenstarter P_F
  • Beginndatum Beginndatum
P

P_F

Hi, ich habe eine funktion, die alle Dateien des $_FILES Array (sofern auf Größe und Dateityp gerüft) hochlädt. Die Funktion funktioniert auch einwandfrei, nur habe ich folgendes Problem: Wenn ich testweise eine unerlaubte Datei, bsp. 20 MB Mpegfile hochladen will, dann lädt er ohne ende, wahrscheinlich die datei hoch ...? Werden nicht normalerweise Dateityp und Größe vom Browser direkt an das Skript übergeben bevor die Datei hochgeladen wird?

Hier meine Funktion:

PHP:
function upload_upload_files( $files_array, $files_destination, $new_filename_function=null, $min_filesize=1, $max_filesize=1000, $allowed_file_types ) {

    /**
     * go thru files_array and upload each file or set error_message
     */
    if (count($files_array) > 0) {

        while (list($key,$value) = each($files_array)) {

            $err = false;

            $filename       = $files_array[$key]['name'];
            $filename_tmp   = $files_array[$key]['tmp_name'];
            $filesize       = $files_array[$key]['size'];
            $filetype       = $files_array[$key]['type'];

            if (empty($filename)) {
                continue;
            }

            /**
             * error: wrong filetype
             */
            if (upload_check_file_type($filetype, $allowed_file_types) == false) {
                $err = true;
                $results[$filename]['uploaded'] = false;
                $results[$filename]['error'] = 'type';
                continue;
            }

            /**
             * error: wrong filesize
             */
            if (upload_check_file_size($filesize, $min_filesize, $max_filesize) == false) {
                $err = true;
                $results[$filename]['uploaded'] = false;
                $results[$filename]['error'] = 'size';
                continue;
            }

            /**
             * error: no uploaded file
             */
            if (is_uploaded_file($filename_tmp) == false) {
                $err = true;
                $results[$filename]['uploaded'] = false;
                $results[$filename]['error'] = 'nouploadedfile';
                continue;
            }

            /**
             * no errors, upload files and prepare output array
             */

            if ($err == false) {


                /**
                 * if function fpr new filename is defined use ist
                 */
                if ($new_filename_function !== null && function_exists($new_filename_function)) {

                    /**
                     * get the file_extension from filetype-array
                     */
                    $file_extension = $allowed_file_types[$filetype];

                    $new_filename = $new_filename_function() . '.' . $file_extension;
                    $results[$filename]['new_filename'] = $new_filename;
                    $results[$filename]['size'] = $filesize;
                    $results[$filename]['type'] = $filetype;

                } else {
                    $new_filename = $filename;
                }

                /**
                 * ... if not, use the original filename
                 */
                if (copy($filename_tmp, $files_destination.'/'.$new_filename)) {
                    $results[$filename]['uploaded'] = true;
                }

            }

        }

    }

    return $results;

}

und die prüffunktionen für Größe und Typ:

PHP:
function upload_check_file_type( $file_type, $allowed_file_types ) {
    if (array_key_exists($file_type, $allowed_file_types)) {
        return true;
    } else {
        return false;
    }
}

function upload_check_file_size( $file_size, $min_filesize, $max_filesize ) {
    if ($file_size < $min_filesize || $file_size > $max_filesize) {
        return false;
    } else {
        return true;
    }
}

Aufruf der Funktion

PHP:
        $upload_results = upload_upload_files(  $_FILES,
                                                _MEDIA_DIR,
                                                'um_create_UserImageFilename',
                                                1,
                                                100000000000,
                                                array(  'image/jpeg' => 'jpg',
                                                        'image/pjpeg' => 'jpg',
                                                        'image/jpg' => 'jpg',
                                                        'image/gif' => 'gif',
                                                        'image/png' => 'png') );
 
Zuletzt bearbeitet von einem Moderator:
Wo hast du denn die maximale Dateigröße festgelegt?
Ich bin gerade nicht zu Hause aber heute nachmittag könnte ich dir schnell ein bisschen Code schreiben so das die Übrprüfung funktioniert dann kannst du dir ja mal ansehen wie das funktioniert.
 
Die überprüfung funktioniert, das ist nicht das problem !!
Aber ich fragte, ob die Datei erst auf den Server geladen wird, und dann überprüft wird !

Schau dir doch mal an, wie ich die Funktion aufrufe ... der 5. Parameter ist die maximalgröße, aber darum geht es ja in diesem Fall garnicht und das funktioniert auch alles. Das Dateityp array enthält nur imagetypen, also dürfte eine mpeg-datei doch garnicht zugelassen werden.
 
Das Skript und damit deine Prüfung der gesendeten Dateien wird erst ausgeführt, wenn die Übertragung an den Server beendet ist, das heißt wenn die Datei entweder komplett hochgeladen wurde oder ein Fehler bei der Übertragung auftrat.
 
gut, das wollte ich wissen, ist das immer so? gibt es keine Möglichkeit das vorher zu prüfen?
 
Zurück