2013-03-13 4 views
5

Я просто пытаюсь загрузить файл, и ничего не работает.Почему мой файл не загружается?

<!DOCTYPE html> 
<html><body> 

      <form id="exp" enctype = "multipart/form-data" action="../cgi-bin/uploadPic.php"> 
       <input type="file" id="profilePic2" name="newPic"></input> <br /><br /><br /> 
       <input type="submit" value="Upload Pic" style="color:black;"></input> 
      </form> 
    </body></html> 

Выполняется мой файл php. Пожалуйста, обратите внимание на неаккуратный код, я пытаюсь отлаживать через эхо.

<html> 
<body> 
<?php 

$loadFile = true; // error code 
$allowedExts = array("jpg","jpeg","gif","png"); 
$extension = end(explode(".", $_FILES["newPic"]["name"])); 

$file = $_FILES["newPic"]; 
$picIncluded = false; 

if(( ($_FILES["newPic"]["type"] == "image/gif") 
|| ($_FILES["newPic"]["type"] == "image/jpeg") 
|| ($_FILES["newPic"]["type"] == "image/png") 
|| ($_FILES["newPic"]["type"] == "image/pjpeg")) 
&& ($_FILES["newPic"]["size"] < 5000000) 
&& in_array($extension, $allowedExts)){ 
    if($_FILES["newPic"]["error"] > 0){ 
     echo "pnl"; // error code returned to client 
    } 
    else if(file_exists("../profile-pics/" . $file["name"])){ 
     echo "pld"; // picture loaded duplicate 
    } else { 
     $picIncluded = true; 
     echo "finally"; 
     if(move_uploaded_file($file["name"]["tmp_name"],"./" . $file["name"])){ 
      echo "Success again!"; 
     } 
     $path = "../profile-pics/" . $file["name"]; 
    } 
} 
if(is_uploaded_file($_FILES["newPic"]["name"]["tmp_name"])){ 
    echo "Good news!"; 
} 

?> 

</body> 
</html> 

Во всяком случае, функция move_uploaded_file() возвращает ложь, так как он не может найти временный файл. is_uploaded_file() также возвращает false. Мои расширения и все правильно, но все равно безуспешно, загрузка файлов не производится. Как я могу отладить это?

+1

У вас было достаточно прав на папку? –

+0

Как я могу проверить? Я использую Fedora. Мой php находится в/var/www/cgi-bin /. Где будут записываться временные файлы? –

+0

oops. Не знаю о Fedora. Кто-то может вам помочь. –

ответ

5

изменить это

if(move_uploaded_file($file["name"]["tmp_name"],"./" . $file["name"])){ 

в

if(move_uploaded_file($file["tmp_name"],"./" . $file["name"])){ 

потому, что вы назначили

$file = $_FILES["newPic"]; 
+0

Я не думаю, что это причина. –

+0

@ Mr.Student После того, как вы назначили '$ file = $ _FILES [" newPic "];', вы можете ссылаться только на одномерный массив $ file, в $ file нет двухмерного массива. –

+0

Моя ошибка: вы правы. –

2

Кроме того, для проверки безопасности, вы должны проверить is_uploaded_file() перед загрузкой:

if(is_uploaded_file($_FILES["newPic"]["tmp_name"])){ 
if(move_uploaded_file($_FILES["newPic"]["tmp_name"],"../profile-pics/" . $file["name"])){ 
    echo 'file uploaded...'; 
} 
}else{ 
    echo "Possible file upload attack: "; 
} 
+0

Спасибо, что сообщили мне. Я не знал об этом и Я всегда знаком с лучшими практиками. –

Смежные вопросы