2011-08-24 162 views
1

我從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] [ '名'];

但它不起作用。任何幫助感謝!

感謝

+0

只是一個側面說明...你正在做一個'foreach($ _FILES as $ k => $ v)',所以不需要引用'$ _FILES'。你可以使用'$ v'。 – Brad

+0

我會使用verot中的class.upload – Alex

回答

1

服務器上的文件的名稱是$_FILES[...]['tmp_name']$_FILES[...]['name']是用戶計算機上的文件名。

+1

只是爲了澄清:'tmp_name'是服務器上文件的_full路徑_,而'name'只是用戶計算機上文件的文件名組件(無路徑) – Flambino

+0

我仍然困惑,如果我想從第一個文件的文件名到$ image1例如我寫什麼? – 2by

+0

@ 2by,哪個文件名?它在服務器上存在的文件的名稱,或它在上傳器的計算機上的文件名稱? – Brad

1
$img_rname = $_FILES[$k]['name']; 

該行應該獲取文件名。但是,請勿直接使用用戶提供的文件名。數據非常不可信,惡意用戶可以輸入任何他們想要的文件名,包括路徑數據。如果您按原樣使用用戶提供的名稱,那麼您的腳本將會愉快地塗抹他們指定的服務器上的任何文件。

同樣,不要使用copy()來移動上傳的文件。這是效率低下的 - 使用move_uploaded_file()而不是使用move_uploaded_file(),這是明確設計來處理上傳,考慮到上載的一些安全問題copy()沒有,並且還執行移動操作(如果可能的話),其比FAR更快,特別是在大文件。

+0

我可以用move_uploaded_file()替換copy()嗎?我如何將名稱更改爲我選擇讓用戶選擇的instad的東西?謝謝 – 2by

+0

是的。但您還應該檢查來電的返回值,以確保文件DID移動。我建議將有關文件的信息存儲在數據庫中,並使用文件記錄的ID號作爲文件名。這是你產生的東西,用戶根本不會受到影響。 –

+0

謝謝Marc,還有一個問題,我如何將三個文件的名稱設置爲三個不同的名稱? – 2by