尽管包含 MIME 类型,但 PDF 类型文件未加载
PDF type files not loading despite MIME type inclusion
我有一个旨在上传 pdf、MSWord 文档、MSExcel 文件和 MSPowerpoint 的表格。
我打算按如下方式进行 PHP 验证
<?php
if (isset($_FILES['fileupload'])){
$filetype = array('application/pdf', 'application/msword', 'application/mspowerpoint');
if (in_array($_FILES['fileupload']['type'], $filetype)){
if(move_uploaded_file($_FILES["fileupload"]["tmp_name"], "/var/www/uploads/" . $_FILES["fileupload"]["name"])){
$filename = basename($_FILES['fileupload']['name']);
echo $filename;
}//close moveupload
}//close in_array
}//close isset
}
?>
为什么我不能上传类似pdf的文件,但可以上传类似MSword的文件?我见过类似 this 的问题,但我想知道为什么对于这种特殊情况它对我不起作用。
请说明您想上传和享受的任何文件类型
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['file']['type']);
switch ($mime) {
case 'application/pdf':
default:
die("Unknown/not permitted file type");
}
这是我的测试代码:
<?php
ob_start("ob_gzhandler");
header('Content-Type: text/html; charset=utf-8');
$filetype = array('application/pdf', 'application/msword', 'application/mspowerpoint');
$type = $_FILES['fileupload']['type'];
if (in_array($type, $filetype)){
if(move_uploaded_file($_FILES["fileupload"]["tmp_name"], $_FILES["fileupload"]["name"])){
$filename = basename($_FILES['fileupload']['name']);
$show .= '<h2>saved sucessfully</h2>';
}//close moveupload
}//close in_array
else{
$show .= '$type = ' . $type . "\n" ;
$show .= "\nfile type: " . var_export($filetype,true). "\n";
$show .= "\n ###";
}
echo <<<EOT
<!DOCTYPE html>
<html lang="en"><head><title>Test Bed</title></head></body><pre>
$show
</pre>
in_array
application/pdf
application/pdf
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="fileupload" />
<button>Submit</button>
</form></body></html>
EOT;
?>
结果
保存成功
对于没有多重集的上传:
if ($_FILES["fileupload"]["error"] == UPLOAD_ERR_OK) {
if (!in_array($_FILES['fileupload']['type'], $filetype)){
$tmp_name = $_FILES["fileupload"]["tmp_name"];
$filename = basename($_FILES["fileupload"]["name"]);
move_uploaded_file($tmp_name, $filename);
}
}
}
我有一个旨在上传 pdf、MSWord 文档、MSExcel 文件和 MSPowerpoint 的表格。
我打算按如下方式进行 PHP 验证
<?php
if (isset($_FILES['fileupload'])){
$filetype = array('application/pdf', 'application/msword', 'application/mspowerpoint');
if (in_array($_FILES['fileupload']['type'], $filetype)){
if(move_uploaded_file($_FILES["fileupload"]["tmp_name"], "/var/www/uploads/" . $_FILES["fileupload"]["name"])){
$filename = basename($_FILES['fileupload']['name']);
echo $filename;
}//close moveupload
}//close in_array
}//close isset
}
?>
为什么我不能上传类似pdf的文件,但可以上传类似MSword的文件?我见过类似 this 的问题,但我想知道为什么对于这种特殊情况它对我不起作用。
请说明您想上传和享受的任何文件类型
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['file']['type']);
switch ($mime) {
case 'application/pdf':
default:
die("Unknown/not permitted file type");
}
这是我的测试代码:
<?php
ob_start("ob_gzhandler");
header('Content-Type: text/html; charset=utf-8');
$filetype = array('application/pdf', 'application/msword', 'application/mspowerpoint');
$type = $_FILES['fileupload']['type'];
if (in_array($type, $filetype)){
if(move_uploaded_file($_FILES["fileupload"]["tmp_name"], $_FILES["fileupload"]["name"])){
$filename = basename($_FILES['fileupload']['name']);
$show .= '<h2>saved sucessfully</h2>';
}//close moveupload
}//close in_array
else{
$show .= '$type = ' . $type . "\n" ;
$show .= "\nfile type: " . var_export($filetype,true). "\n";
$show .= "\n ###";
}
echo <<<EOT
<!DOCTYPE html>
<html lang="en"><head><title>Test Bed</title></head></body><pre>
$show
</pre>
in_array
application/pdf
application/pdf
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="fileupload" />
<button>Submit</button>
</form></body></html>
EOT;
?>
结果
保存成功
对于没有多重集的上传:
if ($_FILES["fileupload"]["error"] == UPLOAD_ERR_OK) {
if (!in_array($_FILES['fileupload']['type'], $filetype)){
$tmp_name = $_FILES["fileupload"]["tmp_name"];
$filename = basename($_FILES["fileupload"]["name"]);
move_uploaded_file($tmp_name, $filename);
}
}
}