Загрузить документ или PDF с помощью PHP

Я могу загружать изображения нормально, но когда я меняю типы с image/jpg, image/gif на application/msword и application/pdf, это не работает. Вот мой код. Точно такой же код работает для изображений, но для загрузки документов и pdf он выводит "недопустимый файл."Что здесь происходит? Мой файл составляет всего около 30 КБ и находится под ограничением размера файла здесь.

$allowedExts = array("pdf", "doc", "docx"); 
$extension = end(explode(".", $_FILES["file"]["name"]));

if ( ( ($_FILES["file"]["type"] == "application/msword") || ($_FILES["file"]["type"] == "text/pdf") ) 
&& ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts))
{      
 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
}
else
{
echo "Invalid file."
}

6 ответов


не используйте


пожалуйста, добавьте правильные типы mime в свой код-по крайней мере, эти:

.jpeg -> image/jpeg
.gif  -> image/gif
.png  -> image/png

список MIME-типов можно найти здесь.

кроме того, упростить логику кода и сообщить номер ошибки, чтобы помочь первому уровню поддержки отслеживать проблемы:

$allowedExts = array(
  "pdf", 
  "doc", 
  "docx"
); 

$allowedMimeTypes = array( 
  'application/msword',
  'text/pdf',
  'image/gif',
  'image/jpeg',
  'image/png'
);

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

if ( 20000 < $_FILES["file"]["size"]  ) {
  die( 'Please provide a smaller file [E/1].' );
}

if ( ! ( in_array($extension, $allowedExts ) ) ) {
  die('Please provide another file type [E/2].');
}

if ( in_array( $_FILES["file"]["type"], $allowedMimeTypes ) ) 
{      
 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); 
}
else
{
die('Please provide another file type [E/3].');
}

$folder = "Resume/";
$temp = explode(".", $_FILES["uploaded"]["name"]);
$newfilename = round(microtime(true)).'.'. end($temp);
$db_path ="$folder".$newfilename  ;
//remove the .
$listtype = array(
'.doc'=>'application/msword',
'.docx'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'.rtf'=>'application/rtf',
'.pdf'=>'application/pdf'); 
if ( is_uploaded_file( $_FILES['uploaded']['tmp_name'] ) )
{
if($key = array_search($_FILES['uploaded']['type'],$listtype))
{if (move_uploaded_file($_FILES['uploaded']  ['tmp_name'],"$folder".$newfilename))
{
include('connection.php');
$sql ="INSERT INTO tb_upload
(filePath) VALUES ('$db_path')";
}
}
else    
{
echo "File Type Should Be .Docx or .Pdf or .Rtf Or .Doc";
}

одно из ваших условий терпит неудачу. Проверьте значение MIME-типа для ваших файлов.
Попробуйте использовать application / pdf, а не text / pdf. См.правильный тип носителя MIME для PDF-файлов


можно использовать

$_FILES['filename']['error'];

Если происходит ошибка, то он возвращает "ошибка" еще 1,2,3,4 или 1 если сделать

1: если размер файла превышает лимит .... Вы можете найти другие варианты, погуглив


для приложения / msword и приложения/vnd.ms-excel, когда я удалил ограничение размера:

($_FILES["file"]["size"] < 20000)

...он работал нормально.