Получение имен файлов из скрипта загрузки - PullRequest
1 голос
/ 24 августа 2011

Я скачал скрипт загрузки с Cafewebmaster. Я выбрал максимальный размер загрузки - 3 файла. Как получить каждое отдельное имя файла, чтобы я мог поместить их в свою базу данных MySQL в отдельные столбцы?

Вот скрипт:

<?php

/**
* Smart Image Uploader by @cafewebmaster.com
* Free for private use
* Please support us with donations or backlink
*/

$upload_image_limit = 3; // How many images you want to upload at once?
$upload_dir         = "img_upload/"; // default script location, use relative or absolute path
$enable_thumbnails  = 1 ; // set 0 to disable thumbnail creation
$max_image_size     = 1024000 ; // max image size in bytes, default 1MB

##################### THUMBNAIL CREATER FROM GIF / JPG / PNG

function make_thumbnails($updir, $img){

    $thumbnail_width    = 200;
    $thumbnail_height   = 100;
    $thumb_preword      = "thumb_";

    $arr_image_details  = GetImageSize("$updir"."$img");
    $original_width     = $arr_image_details[0];
    $original_height    = $arr_image_details[1];

    if( $original_width > $original_height ){
        $new_width  = $thumbnail_width;
        $new_height = intval($original_height*$new_width/$original_width);
    } else {
        $new_height = $thumbnail_height;
        $new_width  = intval($original_width*$new_height/$original_height);
    }

    $dest_x = intval(($thumbnail_width - $new_width) / 2);
    $dest_y = intval(($thumbnail_height - $new_height) / 2);



    if($arr_image_details[2]==1) { $imgt = "ImageGIF"; $imgcreatefrom = "ImageCreateFromGIF";  }
    if($arr_image_details[2]==2) { $imgt = "ImageJPEG"; $imgcreatefrom = "ImageCreateFromJPEG";  }
    if($arr_image_details[2]==3) { $imgt = "ImagePNG"; $imgcreatefrom = "ImageCreateFromPNG";  }


    if( $imgt ) { 
        $old_image  = $imgcreatefrom("$updir"."$img");
        $new_image  = imagecreatetruecolor($thumbnail_width, $thumbnail_height);
        imageCopyResized($new_image,$old_image,$dest_x,         
        $dest_y,0,0,$new_width,$new_height,$original_width,$original_height);
        $imgt($new_image,"$updir"."$thumb_preword"."$img");
    }

}


################################# UPLOAD IMAGES

        foreach($_FILES as $k => $v){

            $img_type = "";

            ### $htmo .= "$k => $v<hr />";  ### print_r($_FILES);

            if( !$_FILES[$k]['error'] && preg_match("#^image/#i", $_FILES[$k]['type']) && $_FILES[$k]['size'] < $max_image_size ){

                $img_type = ($_FILES[$k]['type'] == "image/jpeg") ? ".jpg" : $img_type ;
                $img_type = ($_FILES[$k]['type'] == "image/gif") ? ".gif" : $img_type ;
                $img_type = ($_FILES[$k]['type'] == "image/png") ? ".png" : $img_type ;

                $img_rname = $_FILES[$k]['name'];
                $img_path = $upload_dir.$img_rname;

                copy( $_FILES[$k]['tmp_name'], $img_path ); 
                if($enable_thumbnails) make_thumbnails($upload_dir, $img_rname);
                $feedback .= "Image and thumbnail created $img_rnam";

            }
        }


############################### HTML FORM
    while($i++ < $upload_image_limit){
        $form_img .= '<label>Image '.$i.': </label> <input type="file" name="uplimg'.$i.'"><br />';
    }

    $htmo .= '
        <p>'.$feedback.'</p>
        <form method="post" enctype="multipart/form-data">
            '.$form_img.' <br />
            <input type="submit" value="Upload Images!" style="margin-left: 50px;" />
        </form>
        ';  

    echo $htmo;

Хотя я просто мог бы сделать что-то вроде: $ images1 = $ _FILES ['0'] ['name'];

Но это не работает. Любая помощь приветствуется!

Спасибо

Ответы [ 2 ]

1 голос
/ 24 августа 2011
$img_rname = $_FILES[$k]['name'];

эта строка должна извлекать имя файла.Однако НЕ используйте предоставленные пользователем имена файлов напрямую.Данные крайне ненадежны, и злонамеренный пользователь может ввести для имени файла все, что захочет, включая данные пути.Если вы используете предоставленное пользователем имя «как есть», ваш сценарий будет радостно писать над любым файлом на вашем сервере, который они указали.

Также не используйте copy() для перемещения загруженного файла.вокруг.Это неэффективно - вместо этого используйте move_uploaded_file(), который явно предназначен для обработки загрузок, учитывает некоторые проблемы безопасности с загрузками, которых нет copy(), а также выполняет операцию перемещения (если возможно), которая на FAR быстрее, чем копияособенно для больших файлов.

1 голос
/ 24 августа 2011

Имя файла на вашем сервере в $_FILES[...]['tmp_name'].$_FILES[...]['name'] - это имя файла на компьютере пользователя.

...