2013-05-23 2 views
0

Я хочу, чтобы загрузить файл (PDF) с помощью PHP,не может загрузить файл в формате PDF с помощью PHP

Я нашел код в Интернете, и я просто добавить тип моих файлов: применение/PDF но он не работал для файла pdf. (он отлично работает для изображений).

HTML код

<form action="upload_file.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br> 
    <input type="submit" name="submit" value="Submit"> 
    </form> 

код PHP

$allowedExts = array("gif", "pdf", "GIF", "jpeg", "JPEG", "jpg", "JPG", "png", "PNG"); 
$extension = end(explode(".", $_FILES["file"]["name"])); 
if ((($_FILES["file"]["type"] == "image/gif") 
    || ($_FILES["file"]["type"] == "application/pdf") 
    || ($_FILES["file"]["type"] == "image/jpeg") 
    || ($_FILES["file"]["type"] == "image/jpg") 
    || ($_FILES["file"]["type"] == "image/pjpeg") 
    || ($_FILES["file"]["type"] == "image/x-png") 
    || ($_FILES["file"]["type"] == "image/png")) 
    && ($_FILES["file"]["size"] < 90000000000) // increased allowed size may be your problem 
    && in_array($extension, $allowedExts)) 
{ 
    if ($_FILES["file"]["error"] > 0) 
    { 
     echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 
     echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
     echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
     echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
     echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 

     if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
      echo $_FILES["file"]["name"] . " already exists. "; 
     } 
     else 
     { 
      move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
} 
else 
{ 
    echo "Invalid file"; 
} 

ошибка

Invalid file 

*

Update

*

после добавления var_dump($_FILES['file']); в начале моего скрипта

На хромом (работает отлично) выход:

array 
    'name' => string 'Nouveau Document Microsoft Office Word.pdf' (length=42) 
    'type' => string 'application/pdf' (length=15) 
    'tmp_name' => string 'C:\wamp\tmp\php58AD.tmp' (length=23) 
    'error' => int 0 
    'size' => int 79770 
Upload: Nouveau Document Microsoft Office Word.pdf 
Type: application/pdf 
Size: 77.900390625 kB 
Temp file: C:\wamp\tmp\php58AD.tmp 

на firfox он не работал, выход

array 
    'name' => string 'Nouveau Document Microsoft Office Word.pdf' (length=42) 
    'type' => string 'application/force-download' (length=26) 
    'tmp_name' => string 'C:\wamp\tmp\phpBEFD.tmp' (length=23) 
    'error' => int 0 
    'size' => int 79770 

string 'application/force-download' (length=26) 

Update2

* Код wirthout $ _FILES [ "Файл"] [ "типа"] *

 var_dump($_FILES["file"]["type"]); 
    $allowedExts = array("gif","pdf", "GIF"); 
    $extension = end(explode(".", $_FILES["file"]["name"])); 

    in_array($extension, $allowedExts); 


    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 


     move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
    echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 

он работал отлично для всех моих браузерах, но я должен проверьте тип и размер файлов! и в чем проблема?

+3

Попробуйте добавить var_dump ($ _ FILES ["file"] ["type"]); сразу после недействительного эха файла. – blue112

+0

Вы делаете поиск с учетом регистра (не очень хорошая идея ...), и вы не добавляли 'PDF' в разрешенный массив расширений. У вашего тестового файла есть расширение в нижнем регистре? – jeroen

+0

@jeroen да мой тестовый файл имеет расширение в нижнем регистре – Sonya

ответ

2

Помните, что файл mime type отправляется клиентом, а не определяется сервером. Таким образом, его можно легко обмануть.

Не следует проверять это. Удалите все сведения об этом и просто проверьте расширение файла.

Вы можете изменить эту строку:

$extension = end(explode(".", $_FILES["file"]["name"])); 

С этим:

$extension = strtolower(end(explode(".", $_FILES["file"]["name"]))); 

и изменить массив с только нижний регистр расширения.

+0

его stange, но знает, что он работает на IE, а не на firefox !!! – Sonya

+0

Вы можете захотеть var_dump ($ _ FILES ['file']) при попрошайничестве вашего скрипта, чтобы вы могли видеть, что происходит, и какая разница между этими двумя браузерами. – blue112

+0

Я обновил свою почту – Sonya

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