天道酬勤,学无止境

在使用“finfo”PHP 类执行 mime/extension 验证脚本期间,“rtf”文件扩展名消失(The "rtf" file extension is disappearing during the execution of the mime/extension validation script using "finfo" PHP class)

问题

我正在尝试使用"extension X mime"文件值通过 phpmailer 创建上传文件的交叉验证,系统正在处理我需要执行此操作的几乎所有文件,但对于.rtf文件,脚本不起作用.

扩展名消失了,如果文件是.rtf ,脚本将无法获得它。 我正在使用此脚本:https://stackoverflow.com/a/33349901/4623271 并进行了一些调整。

代码中的波纹管是变量$ext ,我可以在其中获取验证允许的任何文件的扩展名,除了.rtf文件,当文件是.rtf ,变量显然是空的。

我尝试使用$ext = end(explode(".", $_FILES["uploadedFile"]["name"])); 但同样,当是.rtf文件时,变量变为空。

    // mime verification
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    if (false === $ext = array_search(
        $finfo->file($_FILES['uploadedFile']['tmp_name']),
        array(
            'doc' => 'application/msword',
            'docx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
            'rtf' => 'application/msword',
            'odt' => 'application/vnd.oasis.opendocument.text',
            'txt' => 'text/plain',
            'pdf' => 'application/pdf',
        ),
        true
    )) {
         $errorMsg .= "<br> Please, watch that the formats allowed are: \"doc\", \"docx\", \"rtf\", \"odt\", \"txt\", \"pdf\"' ";
    }

感谢您阅读本文所花费的时间。

回答1

我发现问题在于我在数组中使用的 mime 值来验证.rtf文件。

$finfo = new finfo(FILEINFO_MIME_TYPE);读取的 mime 类型$finfo = new finfo(FILEINFO_MIME_TYPE); 不是在具有此类信息的在线表格中找到的通常的 mime 类型,并且我已经用它来创建初始数组。

在巴西 PHP Telegram 群中寻求帮助后,我收到了分析$finfo变量值的提示。

当我应用var_dump ($finfo->file($_FILES['uploadedFile']['tmp_name'])); 我发现对于FILEINFO_MIME_TYPE .rtf文件的 mime 是: text/rtf而不是application/rtf ,正如我上面所说,是.rtf文件的 mime 类型最常见的选项。

因此,由于脚本期望text/rtf.rtf文件关联,因此发生了验证错误。

在我更改text/rtf的键值而不是application/mswordapplication/rtf ,脚本按预期工作。

现在我使用 phpmailer 发送带有 mime 验证的附件。

感谢所有试图以某种方式提供帮助的人。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 在Laravel 4中替换File :: mime()(以从文件扩展名获取mime类型)(Replacement for File::mime() in Laravel 4 (to get mime type from file extension))
    问题 Laravel 3有一个File :: mime()方法,可以很容易地从其扩展名中获取文件的mime类型: $extension = File::extension($path); $mime = File::mime($extension); 升级到Laravel 4时出现错误: 调用未定义的方法Illuminate \ Filesystem \ Filesystem :: mime() 我也看不到Filesystem API文档中对mime类型的任何提及。 在Laravel 4中获取文件的MIME类型的推荐方法是什么(请注意,这不是用户上传的文件)? 回答1 我发现的一种解决方案是使用Symfony HttpFoundation File类(该类已作为依赖项包含在Laravel 4中): $file = new Symfony\Component\HttpFoundation\File\File($path); $mime = $file->getMimeType(); 实际上,File类使用Symfony MimeTypeGuesser类,因此它也可以工作: $guesser = Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser::getInstance(); echo $guesser-
  • The "rtf" file extension is disappearing during the execution of the mime/extension validation script using "finfo" PHP class
    I am trying to create a cross validation of uploaded files through phpmailer using the "extension X mime" file values, the system is working to almost all files that i need to do this, but exceptionally with .rtf files the script isn't working. The extension just disappear, the script can't get this if the file is .rtf. I'm using this script: https://stackoverflow.com/a/33349901/4623271 with some adaptations. Bellow in the code, is the variable $ext where i can get the extension of any files allowed by the verification, except .rtf files, when the file is a .rtf, the variable becomes
  • 如何在PHP 5.5中获取文件的MIME类型?(How to get MIME type of a file in PHP 5.5?)
    问题 我在PHP 5.5中使用mime_content_type()获取MIME类型,但它引发fatal: error function not found 。 如何在PHP 5.5上实现此目标? 回答1 利用finfo()函数。 一个简单的例子: <?php $finfo = finfo_open(FILEINFO_MIME_TYPE); echo finfo_file($finfo, "path/to/image_dir/image.gif"); finfo_close($finfo); OUTPUT : image/gif 注意:Windows用户必须在php.ini中包含捆绑的php_fileinfo.dll DLL文件才能启用此扩展。 回答2 我花了太多时间试图使finfo函数正常工作。 最后,我终于创建了自己的函数,以将文件扩展名与任何mime类型的数组进行匹配。 这不是确保文件确实是扩展名所指示的真实含义的完整方法,但是可以通过在服务器上处理上述文件的I / O来缓解该问题。 function mime_type($file) { // there's a bug that doesn't properly detect // the mime type of css files // https://bugs.php.net/bug.php?id=53035 //
  • 如何使用PHP强制下载文件(How to force file download with PHP)
    问题 我想要求用户使用PHP访问网页时要下载文件。 我认为这与file_get_contents ,但不确定如何执行。 $url = "http://example.com/go.exe"; 下载带有header(location)的文件后,它不会重定向到另一页。 它只是停止。 回答1 阅读有关内置PHP函数readfile的文档 $file_url = 'http://www.myremoteserver.com/file.exe'; header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); readfile($file_url); 还要确保基于文件application / zip,application / pdf等添加适当的内容类型-但仅当您不想触发“另存为”对话框时。 回答2 <?php $file = "http://example.com/go.exe"; header("Content-Description: File Transfer"); header(
  • 是否可以在PHP中声明静态和非静态方法?(Is it possible to declare a method static and nonstatic in PHP?)
    问题 我可以将对象中的方法声明为静态方法和非静态方法,且其名称与调用静态方法的名称相同吗? 我想创建一个具有静态方法“ send”和一个调用静态函数的非静态方法的类。 例如: class test { private $text; public static function instance() { return new test(); } public function setText($text) { $this->text = $text; return $this; } public function send() { self::send($this->text); } public static function send($text) { // send something } } 我希望能够在这两个函数上调用该函数 test::send("Hello World!"); 和 test::instance()->setText("Hello World")->send(); 可能吗? 回答1 您可以执行此操作,但这有点棘手。 您必须通过重载来做到这一点:__call和__callStatic魔术方法。 class test { private $text; public static function instance() { return new test();
  • PHP上传文件验证(PHP Upload File Validation)
    问题 我正在创建文件上传脚本,并且正在寻找验证上传文件的最佳技术和做法。 允许的扩展名是: $allowed_extensions = array('gif','jpg','png','swf','doc','docx','pdf','zip','rar','rtf','psd'); 这是我在做什么的清单。 检查文件扩展名$path_info = pathinfo($filename); if( !in_array($path_info['extension'], $allowed_extensions) ) { die('File #'.$i.': Incorrent file extension.'); } 检查文件的MIME类型$allowed_mimes = array('image/jpeg','image/png','image/gif','text/richtext','multipart/x-zip','application/x-shockwave-flash','application/msword','application/pdf','application/x-rar-compressed','image/vnd.adobe.photoshop'); if( !in_array(finfo_file($finfo, $file), $allowed
  • 如何检查PHP中上传文件的文件类型?(How to check file types of uploaded files in PHP?)
    问题 在PHP网站上,他们建议的唯一实际检查是在此处使用is_uploaded_file()或move_uploaded_file() 。 当然,出于多种原因,您通常不希望用户上传任何类型的文件。 因此,我经常使用一些“严格”的MIME类型检查。 当然,这是非常有缺陷的,因为通常哑剧类型是错误的,并且用户无法上传他们的文件。 伪造和/或更改也非常容易。 除此之外,每种浏览器和操作系统对它们的处理方式也不同。 另一种方法是检查扩展名,这当然比mime类型更容易更改。 如果只需要图像,则可以使用类似getimagesize() 。 那其他类型的文件呢? PDF,Word文档还是Excel文件? 甚至是纯文本文件? 编辑:如果您没有mime_content_type或Fileinfo,并且system(“ file -bi $ uploadedfile”)给您错误的文件类型,还有哪些其他选择? 回答1 看一下mime_content_type或Fileinfo。 这些是内置的PHP命令,用于通过查看文件的内容来确定文件的类型。 还要检查以上两页上的评论,还有其他一些好的建议。 就我个人而言,我使用了本质上是system("file -bi $uploadedfile")东西感到很幸运,但是我不确定这是否是最好的方法。 回答2 恕我直言,所有MIME类型检查方法都没有用。
  • 使用PHP上传DOC或PDF(Upload DOC or PDF using PHP)
    问题 我可以上传图像,但是当我将图像类型从图像/ jpg,图像/ gif更改为应用程序/ msword和应用程序/ pdf时,它不起作用。 这是我的代码。 完全相同的代码适用于图像,但是对于上载docs和pdf,它输出“无效文件”。 这里发生了什么? 我的文件只有大约30kb,并且远远低于此处的文件大小限制。 $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." } 回答1 不要使用['type']参数来验证上传。 该字段是用户提供的,可以轻松伪造
  • 使用 Zip php 创建 ODT 文件一般输入/输出错误(Create ODT file using Zip php general input/output error)
    问题 我的系统生成一个包含下一个文件和子文件夹的文件夹 我正在使用此代码创建一个 odt 文件。 当我使用此代码运行我的系统以通过 Apache + PHP 和 Ubuntu 12.04 将该子文件夹和文件压缩到 test.odt 文件时,odt 文件就可以了。 但是当我尝试通过 IIS + PHP 和 Windows 将一个压缩到 test.odt 文件时,odt 文件不起作用。 我知道不起作用,因为当我用 LibreOffice 打开 odt 文件时,我收到错误输入/输出一般错误。 这里是 odt 文件。 当我提取通过 Windows 生成的 odt 文件时,文件夹和文件具有相同的图片形式。 我正在 google 中查找,也许问题出在 mimetype 编码上。 我将如何修改代码 1 以便解决我的问题? 编辑 我将此文件夹与下面的代码一起使用,但在我的 odt 文件中我只得到“PKÜNTEBasic/PKÜNTEúミ‚lÓR/Basic/script-lc.xmleマAoÂ0”。 这里的例子。 <?php $wordtemplatedownloadpath = "siscons\\test\\wordtemplatedownload\\"; Zip($wordtemplatedownloadpath . "pasta3", $wordtemplatedownloadpath
  • 如何保护 PHP 图像上传脚本免受攻击?(How can I protect a PHP image upload script from exploits?)
    问题 我为当地的非盈利出版物创建了一个简单的页面(使用脚本和 Stack 的一些帮助以及朋友的一些帮助;我对 PHP 知之甚少)一个简单的页面,人们可以在其中上传照片。 我不太擅长安全(出于无知,而不是故意疏忽),但我已采取以下步骤来保护此页面: • PHP 脚本设置为只接受.jpg、.png 和.tif 文件上传; • 保存表单内容的子文件夹权限设置为700,保存上传照片的子文件夹权限设置为700; • 根据文档,我的主机具有以下配置以确保只有 .php 文件以 .php 运行: <FilesMatch \.php$> SetHandler php52-fcgi </FilesMatch> • 我已将 .htaccess 文件放在相关(主内容和已保存内容)文件夹中: RemoveHandler .php RemoveHandler .inc RemoveHandler .pl RemoveHandler .cgi RemoveHandler .py RemoveHandler .fcgi 然而,一夜之间,有人发现了这个测试页面,并提交了一个看似完美无害的测试消息和小 .jpg。 这是一个带有非直观 URL 的私人测试页面,只有我和其他三个人知道; 其他人都没有发送此测试。 这显然让我担心发生了一些奇怪的事情,而且我担心我对安全性了解不足,无法确保此页面是安全的。
  • 如何以编程方式确定文件的真实扩展名/类型?(How can I determine a file's true extension/type programmatically?)
    问题 我正在处理一个脚本,该脚本将处理用户上载到服务器的内容,并且作为一个附加的安全层,我想知道: 有没有一种方法可以检测文件的真实扩展名/文件类型,并确保它不是被其他扩展名掩盖的另一个文件类型? 每种类型/扩展名都有字节戳或某些唯一标识符吗? 我希望能够检测到某人没有将其他扩展名应用于他们正在上传的文件。 回答1 不是,不是 您将需要读取每个文件的前几个字节,并将其解释为已知文件类型的有限集合的标头。 大多数文件具有不同的文件头,在MP3的前几个字节或前几个千字节中包含某种元数据。 您的程序将必须简单地尝试为每种接受的文件类型解析文件。 对于我的程序,我在try-catch块中将上传的图像发送到imagemagick,如果它爆炸了,那么我猜它是不好的图像。 这应该被认为是不安全的,因为我正在将任意的(用户提供的)二进制数据加载到外部程序中,该程序通常是攻击的载体。 在这里,我相信imageMagick不会对我的系统做任何事情。 我建议您为要使用的重要文件类型编写自己的处理程序,以避免任何攻击媒介。 编辑:我看到在PHP中有一些工具可以为您完成此操作。 同样,MIME类型是用户浏览器要求的文件类型。 读取它们并在代码中对其进行操作既方便又有用,但这不是一种安全的方法,因为任何向您发送错误文件的人都会轻易地伪造MIME标头。 这是一种前线防御,可以防止期望JPEG的代码进入PNG
  • 在PHP中以上传形式检查文件扩展名(Check file extension in upload form in PHP [duplicate])
    问题 这个问题已经在这里有了答案: 如何在PHP中获得文件扩展名? (29个答案) 10个月前关闭。 我检查文件扩展名是否已上传。 我的示例方法有效,但是现在我需要了解我的方法(使用pathinfo )是否正确。 还有另一种更好更快的方法吗? $filename = $_FILES['video_file']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if ($ext !== 'gif' || $ext !== 'png' || $ext !== 'jpg') { echo 'error'; } 回答1 使用if( $ext !== 'gif' )可能没有效率。 如果您允许20种不同的扩展名怎么办? 尝试: $allowed = array('gif', 'png', 'jpg'); $filename = $_FILES['video_file']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if (!in_array($ext, $allowed)) { echo 'error'; } 回答2 检查文件扩展名不是最佳实践。 完成此任务的首选方法是检查文件的MIME类型。 从PHP: <?php $finfo = finfo_open
  • 完整的安全图像上传脚本(Full Secure Image Upload Script)
    问题 我不知道这种情况是否会发生,但是我会尝试的。 在过去的一个小时中,我对图像上传安全性进行了研究。 我了解到有很多功能可以测试上传。 在我的项目中,我需要确保上传的图像安全。 可能还有很多,并且可能需要很多带宽,因此购买API并不是一种选择。 因此,我决定获得用于真正安全图像上传的完整PHP脚本。 我还认为这将对那里的许多人有所帮助,因为不可能找到真正安全的人。 但是我不是php方面的专家,因此添加一些功能确实让我感到头疼,因此我将要求社区提供帮助以创建一个真正安全图像上传的完整脚本。 真正很棒的主题在这里(但是,它们只是在告诉您完成此技巧所需的内容,而不是如何做到这一点,正如我所说的那样,我不是PHP的高手,所以我无法全部完成此操作我本人):PHP映像上传安全性检查列表https://security.stackexchange.com/questions/32852/risks-of-a-php-image-upload-form 总而言之,他们告诉我们,这是安全映像上传所需要的(我将在以上页面中引用): 使用.httaccess禁止PHP在上传文件夹中运行。 如果文件名包含字符串“ php”,则不允许上传。 仅允许扩展名:jpg,jpeg,gif和png。 仅允许图像文件类型。 禁止使用两种文件类型的图像。 更改图像名称。 上载到不是根目录的子目录。 还: 使用GD
  • PHP Upload文件增强安全性(PHP Upload file enhance security)
    问题 嘿..我的问题是如何防止有人上载您假装的扩展名来上传病毒或某些恶意代码,例如,我有一个pdf文件上传器,任何人都可以上载带有pdf伪装的二进制文件,有很多程序可以做到这一点。 回答1 上载文件存在许多安全隐患。 第一个问题是文件可能不是您想要的文件,在这种情况下为pdf。 变量$_FILES['file_name']['type']是由攻击者控制不能被信任。 通常使用漏洞利用代码或篡改数据来修改此值。 1)安全系统的第一步是确保文件的扩展名为.pdf: if("pdf"!=substr($fileName, strrpos($fileName, '.') + 1)){ die("Invalid File Type"); } 2)接下来,您应该使用php filetype()函数检查它的文件类型。 3)一个严重的问题是这些PDF文件可能利用Adobe制造的软件中常见的漏洞,例如缓冲区溢出。 这些PDF用于在“按驱动器下载”攻击中传播病毒。 最好的解决方案是安装Web应用程序防火墙Mod_Security。 这将阻止像sql injection和xss这样的攻击击中您的Web应用程序。 可以将mod_Secuirty配置为使用modsec-clamscan扫描所有上传文件中的病毒。 回答2 我们结合使用fileinfo +文件扩展名检查。 虽然浏览器通常会发送mime类型
  • 验证base64编码的图像(Validating base64 encoded images)
    问题 我建立一个应用程序,允许用户POST是那么base64编码并显示给所有用户的HTML5画布数据。 我正在考虑将数据解析为实际的.png文件并存储在服务器上,但是base64路由允许我将图像存储在数据库中并最大程度地减少请求。 图像是唯一的,很少,并且页面不会经常刷新。 一点点的jQuery都会获取画布数据data:image/png;base64,iVBORw...并将其传递给包装如下的PHP脚本: <img src="$data"></img> 但是,安全性是基石,需要验证base64画布数据以防止在POST请求中传递恶意数据。 我主要关心的是防止外部URL注入到<img>标记中并在页面加载时被请求。 我目前有这样的设置: $data = (isset($_POST['canvas']) && is_string($_POST['canvas'])) ? $_POST['canvas'] : null; $base = str_replace('data:image/png;base64,', '', $data); $regx = '~^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$~' if ((substr($data, 0, 22)) !== 'data
  • 从PHP中的文件名获取MIME类型(Getting mime type from file name in php)
    问题 我具有以下功能来从文件名生成mime类型: function get_mime_type($file) { if (function_exists('finfo_open')) { $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $file); finfo_close($finfo); } else { $mimetype = mime_content_type($file); } if (empty($mimetype)) $mimetype = 'application/octet-stream'; return $mimetype; } 我在代码的这一部分调用此函数: $out['uploads'][] = array( 'filename' => $fldrow['field_value'], 'mimetype' => get_mime_type($fldrow['field_value']), 'id' => $fldrow['ID'], ); $fldrow['field_value']包含'card.pdf' 我期待'application/pdf' 我正在获得'application/octet-stream' 我还使用模式= 1尝试了这种更精细的方法:PHP
  • 如何在PHP中检查上传的文件类型(How to check uploaded file type in PHP)
    问题 我用这段代码来检查图像的类型, $f_type=$_FILES['fupload']['type']; if ($f_type== "image/gif" OR $f_type== "image/png" OR $f_type== "image/jpeg" OR $f_type== "image/JPEG" OR $f_type== "image/PNG" OR $f_type== "image/GIF") { $error=False; } else { $error=True; } 但是有些用户抱怨上传任何类型的图像时都会出错,而另一些用户则没有任何错误! 我想知道这是否可以解决问题: if (mime_content_type($_FILES['fupload']['type']) == "image/gif"){... 任何意见? 回答1 永远不要使用$_FILES..['type'] 。 其中包含的信息完全未经验证,它是用户定义的值。 自己测试类型。 对于图像,exif_imagetype通常是一个不错的选择: $allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF); $detectedType = exif_imagetype($_FILES['fupload']['tmp_name'
  • 在PHP中高效调整JPEG图像大小(Efficient JPEG Image Resizing in PHP)
    问题 在PHP中调整大图像大小的最有效方法是什么? 我目前正在使用GD函数imagecopyresampled来拍摄高分辨率图像,并干净地将其调整为可用于Web查看的尺寸(大约700像素宽乘700像素高)。 这对于较小(小于2 MB)的照片非常有效,并且整个调整大小操作在服务器上花费的时间不到一秒钟。 但是,该网站最终将为摄影师提供服务,他们可能会上传最大10 MB的图像(或最大5000x4000像素的图像)。 对大图像执行这种大小调整操作往往会大大增加内存使用量(较大的图像可能会使脚本的内存使用量超过80 MB)。 有什么方法可以使此调整大小操作更有效? 我应该使用替代图像库(例如ImageMagick)吗? 现在,调整大小的代码看起来像这样 function makeThumbnail($sourcefile, $endfile, $thumbwidth, $thumbheight, $quality) { // Takes the sourcefile (path/to/image.jpg) and makes a thumbnail from it // and places it at endfile (path/to/thumb.jpg). // Load image and get image size. $img = imagecreatefromjpeg(
  • .NET中的文件扩展名和MIME类型(File extensions and MIME Types in .NET)
    问题 我想从给定的扩展名获取MIME Con​​tent-Type(最好不访问物理文件)。 我已经看到了一些与此相关的问题,可以通过以下方式恢复描述该操作的方法: 使用注册表信息。 使用urlmon.dll的FindMimeFromData。 使用IIS信息。 滚动您自己的MIME映射功能。 例如,基于此表。 我已经使用No.1一段时间了,但是我意识到注册表提供的信息不一致,并且取决于计算机上安装的软件。 某些扩展名(如.zip)不需要指定Content-Type。 解决方案2迫使我将文件放在磁盘上,以便读取第一个字节,这虽然速度较慢,但​​可能会得到良好的结果。 第三种方法基于目录服务和所有这些东西,我不太喜欢这种东西,因为我必须添加COM引用,而且不确定IIS6和IIS7是否一致。 另外,我不知道这种方法的性能。 最后,我不想使用自己的表,但是最后,如果我想要平台之间(甚至是Mono)的性能和结果的一致性,似乎是最好的选择。 您是否认为有比使用我自己的表更好的选择,或者其他描述的方法中的一种更好? 您的经验是什么? 回答1 这取决于您需要MIME类型。 通常,对于服务(Web应用程序,Web服务等),建议不要使用依赖于操作系统设置的MIME列表,或者如果您无法找到MIME信息,则仅使用备用列表。 我认为这也是MS选择在其System.Web
  • PHP文件上传检查finfo_file(PHP file upload check finfo_file)
    问题 我有一个有效的 PHP MIME 验证脚本来检查上传到网站的文件。 问题在于当前的解决方案,可以轻松地将 dodgy.php 重命名为harmless.pdf 并且它将通过验证并上传...我想我需要使用 finfo_file PHP 5 逻辑来更精确地检查文件,但不是确定如何最好地将其集成到我当前的解决方案中......有什么建议吗? 当前编码的解决方案如下,它应该只允许上传 .doc、.docx 和 .pdf 文件: $allowedExts = array( "pdf", "doc", "docx" ); $allowedMimeTypes = array( 'application/msword', 'application/pdf', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/x-pdf', 'application/vnd.pdf' ); $extension = end(explode(".", $_FILES["fileinputFileName"]["name"])); if ( ! ( in_array($extension, $allowedExts ) ) ) { //throw error $hook->addError