2016-07-22 47 views
0

當我不想上傳頭像並保留默認的'avatar1.jpg'時,它不斷給我提供相同的錯誤消息。 「文件類型無效!」什麼可能是錯的? 當我上傳頭像時,它工作正常。使用php上傳默認頭像

此代碼是停留在functions.php的

public function uploadAvatar(){ 
     $allowedExts = array("gif", "jpeg", "jpg", "png"); 
     $temp = explode(".", $_FILES["avatar"]["name"]); 
     $extension = end($temp); 
     if ((($_FILES["avatar"]["type"] == "image/gif") 
       || ($_FILES["avatar"]["type"] == "image/jpeg") 
       || ($_FILES["avatar"]["type"] == "image/jpg") 
       || ($_FILES["avatar"]["type"] == "image/pjpeg") 
       || ($_FILES["avatar"]["type"] == "image/x-png") 
       || ($_FILES["avatar"]["type"] == "image/png")) 
       && ($_FILES["avatar"]["size"] < 1000000) 
       && in_array($extension, $allowedExts)) { 
      if ($_FILES["avatar"]["error"] > 0) { 
       redirect('register.php', $_FILES["avatar"]["error"], 'error'); 
      } else { 
       if (file_exists("images/avatars/" . $_FILES["avatar"]["name"])) { 
        redirect('register.php', 'File already exists', 'error'); 
       } else { 
        move_uploaded_file($_FILES["avatar"]["tmp_name"], 
        "images/avatars/" . $_FILES["avatar"]["name"]); 

        return true; 
       } 
      } 

     } 

     else { 
      redirect('register.php', 'Invalid File Type!', 'error'); 
     } 
    } 

此代碼是獲取函數的功能, 「如果($用戶> uploadAvatar()){...}」 成立如果沒有上傳任何內容,則爲默

if(isset($_POST['register-input'])){ 
    //Create Data Array 
    $data = array(); 
    $data['name'] = $_POST['name']; 
    $data['email'] = $_POST['email']; 
    $data['username'] = $_POST['username']; 
    $data['password'] = md5($_POST['password']); 
    $data['password2'] = md5($_POST['password2']); 
    $data['about'] = $_POST['about']; 
    $data['last_activity'] = date("Y-m-d H:i:s"); 

    //Required Fields 
    $field_array = array('name','email','username','password','password2'); 

     if($validate->isRequired($field_array)){ 
      if($validate->isValidEmail($data['email'])){ 
       if($validate->passwordsMatch($data['password'],$data['password2'])){ 
         //Upload Avatar Image 
         if($user->uploadAvatar()){ 
          $data['avatar'] = $_FILES["avatar"]["name"]; 
         } else{ 

          $data['avatar'] = 'avatar1.jpg'; 
         } 

         //Register User 
         if($user->register($data)){ 
          redirect('index.php', 'You are registered and can now log in', 'success'); 
         } else { 
          redirect('index.php', 'Something went wrong with registration', 'error'); 
         } 
       } else { 
        redirect('register.php', 'Your passwords did not match', 'error'); 
       } 
      } else { 
       redirect('register.php', 'Please use a valid email address', 'error'); 
      } 
     } else { 
      redirect('register.php', 'Please fill in all required fields', 'error'); 
     } 

} 
+0

丹尼你說你想我的代碼啓動功能,並在沒有上傳它不會工作。用我的解決方案,腳本執行路徑是否輸入'$ data ['avatar'] ='avatar1.jpg''路徑?你會得到什麼錯誤? – BeetleJuice

+0

我實際上得到這個錯誤,它在函數中。其他{ 重定向('register.php','無效文件類型!','錯誤'); } } – Danny

+0

你把我的代碼塊放在函數的開頭嗎? (不是主要腳本的開始)。如果是這樣,當你沒有上傳任何文件時,當你在該函數的頂部執行'print_r($ _ FILES ['avatar'])'時顯示什麼? – BeetleJuice

回答

0

你可以使用:

    if($user->uploadAvatar()){ 
         $data['avatar'] = $_FILES["avatar"]["name"]; 
        } else{ 

         $file =  'avatar1.jpg'; 

         // Open the file to get existing content 
         $data = file_get_contents($file); 

        // New file 
         $new = 'new_name.jpg'; 

        // Write the contents back to a new file 
         file_put_contents($new, $data); 
        } 
+0

''C:\ wamp \ www \ .... jpg''嚴重嗎?爲什麼硬編碼路徑? – Justinas

+1

@Justinas這是樣本,傳達從文件 – Ehsan

+0

上傳的意義我認爲uploadavatar()函數中必須有錯誤。因爲錯誤文本來自那裏。你怎麼看? – Danny

1

如果不上傳avatar文件,比$_FILES["avatar"]["type"]檢查時,你總是會收到假null == "image/gif" || null == "image/jpeg"...

首先檢查,如果你有這樣做if (!empty($_FILES['avatar']))


旁註這個文件可以更改此代碼:

($_FILES["avatar"]["type"] == "image/gif") 
    || ($_FILES["avatar"]["type"] == "image/jpeg") 
    || ($_FILES["avatar"]["type"] == "image/jpg") 
    || ($_FILES["avatar"]["type"] == "image/pjpeg") 
    || ($_FILES["avatar"]["type"] == "image/x-png") 
    || ($_FILES["avatar"]["type"] == "image/png") 

in_array($FILES['avatar']['type'], ["image/gif", "image/jpeg", "image/pjpeg", "image/x-png", "image/png"]) 
0

在頂部uploadAvatar,你需要檢查是否在開始工作之前有一個文件需要處理。這些線

if(empty($_FILES['avatar']) || 
    !file_exists($_FILES['avatar']['tmp_name']) || 
    !is_uploaded_file($_FILES['avatar']['tmp_name']) 
) return false;