Php 上传前请检查文件PDF或图像

Php 上传前请检查文件PDF或图像,php,image,file,pdf,upload,Php,Image,File,Pdf,Upload,我正在学习PHP,但我自己没有找到正确的方法。我希望始终需要Img(我在表单输入required属性中对此进行检查),但我可以决定是否上传PDF。如果我不同时选择两者,脚本将不会继续 我有这个: // image select from form $img = basename($_FILES['img']['name']); $allow_img = array('jpg', 'png', 'jpeg'); $ext_img = explode('.', str

我正在学习PHP,但我自己没有找到正确的方法。我希望始终需要Img(我在表单输入
required
属性中对此进行检查),但我可以决定是否上传PDF。如果我不同时选择两者,脚本将不会继续

我有这个:

    // image select from form
    $img = basename($_FILES['img']['name']);
    $allow_img = array('jpg', 'png', 'jpeg');
    $ext_img = explode('.', strtolower($_FILES['img']['name']));
    $type_img= end($ext_img);

    //pdf select from form
    $pdf = basename($_FILES['pdf']['name']);
    $allow_pdf = array('pdf');
    $ext_pdf = explode('.', strtolower($_FILES['pdf']['name']));
    $type_pdf= end($ext_pdf);

    if ($img || $pdf) {
        if(!in_array($type_img, $allow_img) || !in_array($type_pdf, $allow_pdf) ) {
         echo "<p><a href='../admin.php'><img style='border:none;' src='../../img/arrow-left.png' /></a>Only jpg, png, jpeg and PDF.</p>";       
        } 
    }
//从表单中选择图像
$img=basename($_文件['img']['name']);
$allow_img=array('jpg','png','jpeg');
$ext_img=explode('.',strtolower($_FILES['img']['name']);
$type\u img=结束($ext\u img);
//pdf从表格中选择
$pdf=basename($_文件['pdf']['name']);
$allow_pdf=array('pdf');
$ext_pdf=explode('.',strtolower($_FILES['pdf']['name']);
$type\u pdf=end($ext\u pdf);
如果($img | |$pdf){
if(!in_数组($type_img,$allow_img)| |!in_数组($type_pdf,$allow_pdf)){
echo“仅jpg、png、jpeg和PDF.

”; } }
这需要javascript


在发送返回之前,您必须检查文件的类型。

第二个
basename()
调用很可能会崩溃,因为没有上载pdf文件时不存在
$\u文件['pdf']
。但你甚至不检查这里的错误。。。查看http服务器错误日志文件,您很可能会在那里看到错误


也就是说:如果发生意外情况,请始终查看日志文件。在使用变量之前,请始终测试变量是否存在。并且在调用某些函数时总是进行错误检查,这些函数可能不会返回您期望的结果

这里有一个超快速的方法来实现这一点:

$filename = $_FILES['img']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);

// allowed extensions
$allowed = array('jpeg', 'png', 'jpeg', 'gif');

if (in_array($ext, $allowed)) {
    echo "<p><a href='../admin.php'><img style='border:none;' src='../../img/arrow-left.png' /></a>Only jpg, png, jpeg and PDF.</p>";       
}
$filename=$\u文件['img']['name'];
$ext=pathinfo($filename,pathinfo_扩展名);
//允许的扩展
$allowed=数组('jpeg','png','jpeg','gif');
if(在数组中($ext,$allowed)){
echo“仅jpg、png、jpeg和PDF.

”; }
就是这样:)

您可以使用
pathinfo()
内置php函数

 $File = $_FILES['image']['name'];
 $Infos = pathinfo($File);
 echo $extension = $info[extension];

 echo "<pre>"; print_r($Infos); echo "</pre>";
 $extension = strtolower( $extension);
 if( $extension=='pdf'){
    // do your stuff
 }
$File=$\u文件['image']['name'];
$Infos=pathinfo($File);
echo$extension=$info[extension];
回声“;印刷(资讯);;回声“;
$extension=strtolower($extension);
如果($extension='pdf'){
//做你的事
}

请通过使用上面的
编辑按钮编辑问题来发布相应的HTML标记。哦,这意味着什么:“脚本没有继续”?继续并不意味着如果我没有选择img和pdf,它不会加载到mysql上,但我只想检查文件是否为jpg,pdf等…如果用户不想上传img或pdf,我希望脚本始终继续在mysql上加载表单的其他部分,我没有发布,因为问题只在于此上传。我重复我的问题,因为你没有真正回答它:“不继续”是什么意思?你看,脚本不会简单地停止。如果他们这样做,总是有原因的。这是因为它们要么是被命令终止的(这里不是这样),要么是某个东西崩溃了。在这种情况下,http服务器错误日志中总是有一些错误。这个条目回答了您的问题。因此,如果我问“这意味着什么”,那么我会问:“实际发生了什么?看看日志文件,看看发生了什么!”。猜测是没有意义的!请看一看。thx phpinfo()更好!!但我如何才能允许用户决定不卸载img或pdf?如果php检查其他表单(名称、作业等)在mysql上的上传