簡體   English   中英

如何驗證輸入文件是否為空

[英]How to verify if input file is empty or not

您好,我有一個腳本,用於在數據庫中插入多個圖片,當我想刪除現有文件並在每次進行更新時插入新文件但我不知道如何僅在輸入是文件時進行刪除,如果不只是跳過那一部分。 這是我的代碼:

$size=$_FILES['files']['size'];
if($size > 1) { 
   $query = "Delete from Imagini_Hotel where ID_Hotel='$id_hotel'"; 
    $result = mysql_query($query)
        or die("query failed: " . mysql_error()); 
} 


$errors= array();
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
    $file_name = $key.$_FILES['files']['name'][$key];
    $file_size =$_FILES['files']['size'][$key];
    $file_tmp =$_FILES['files']['tmp_name'][$key];
    $file_type=$_FILES['files']['type'][$key];  

    if($file_size > 9097152){
        $errors[]='File size must be less than 9 MB';
    }
    if($file_size <= 0)
    {
    }
    else
    {
    $query="Insert into Imagini_Hotel (`ID_Hotel`,`Nume_Poza`,`Prioritate`) VALUES('$id_hotel','$file_name','$key'); ";
    $desired_dir="../../../images/hotel/$id_hotel";
    if(empty($errors)==true){
        if(is_dir($desired_dir)==false){
            mkdir("$desired_dir", 0777);        // Create directory if it does not exist
        }
        if(is_dir("$desired_dir/".$file_name)==false){
            move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
        }else{                                  // rename the file if another one exist
            $new_dir="$desired_dir/".$file_name.time();
             rename($file_tmp,$new_dir) ;               
        }
     mysql_query($query);           
    }else{
            print_r($errors);
    }
}}
if(empty($error)){
    echo "Success";
}

你可以檢查一個['error']參數(反正應該檢查)。 現在你只是假設上傳成功了。

if ($_FILES['tmp_name']['error'][$key] === UPLOAD_ERR_OK) {
   ... file was uploaded ...
} else {
   die("Upload failed with error code " . $_FILES['tmp_name']['error'][$key]);
}

錯誤代碼在此處定義: http//php.net/manual/en/features.file-upload.errors.php您對代碼0(成功)和4(無文件)感興趣。

同樣,請注意您的上傳處理代碼會將您的服務器打開,以實現完全的遠程攻擊。 您在move..()操作中直接使用用戶提供的文件名,允許惡意用戶在系統上的任何文件上亂寫。 沒有什么說用戶提供的文件名不能包含路徑信息,例如['name'] = '../../../../../../../etc/passwd ../../../../../../../etc/ ['name'] = '../../../../../../../etc/passwd ,你的腳本愉快地盲目地使用而沒有任何過濾/檢查。

也許檢查filesize($ file_tmp)是否大於0 - 你會知道文件有一些大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM