【问题标题】:IE won't allow users jpg's to upload via PHP - other image extensions workIE 不允许用户通过 PHP 上传 jpg 文件 - 其他图像扩展也可以使用
【发布时间】:2013-01-29 04:28:20
【问题描述】:

我正在为允许 png、jpg、jpeg 和 gif 扩展名的用户运行图像上传脚本。

使用 IE 7-9 时,用户只能成功提交 png's 或 gif's。 IE 用户似乎无法上传 jpg。

由于这个 IE 问题,我了解 pjpeg 并相应地修改了代码,但是问题仍然存在。 IE 上的用户无法上传 jpg,但其他扩展程序可以正常工作。

有什么提示吗?谢谢!

PHP

            $filename = basename($_FILES['photo']['name']);
            $ext = substr($filename, strrpos($filename, '.') + 1);

            //Edit as per comments below
            $ext = strtolower($ext);

            //Check if the file is a JPG, JPEG, GIF or PNG image and it's size is less than 5Mb
            $allowedExts = array('jpg', 'jpeg', 'gif', 'png');
            if ( (in_array($ext, $allowedExts)) &&
            ($_FILES["photo"]["type"] == "image/jpeg") ||
            ($_FILES["photo"]["type"] == "image/png") ||
            //Edit as per comments below
            ($_FILES["photo"]["type"] == "image/x-png") ||
            ($_FILES["photo"]["type"] == "image/gif") ||
            ($_FILES["photo"]["type"] == "image/pjpeg")
            && ($_FILES["photo"]["size"] <= 5242880) ){

            //Name it and determine the path to which we want to save this file
            $newname = str_replace( ' ', '_', trim( strip_tags( $_POST['first-name'].'_'.$_POST['last-name'] ) ) ) . '_' . $formKey->generateKey() . '_' . time() . '.jpg';
            ...  

表格

<form id="submit-photo" action="index.php?p=uploader" enctype="multipart/form-data" method="POST">
        <?php if(!isset($_SESSION['flash_message']) && isset($_SESSION['recent_field']) ) unset($_SESSION['recent_field']); ?>
        <?php $formKey->outputKey(); ?>
        <input type="hidden" name="MAX_FILE_SIZE" value="5242880" />
                <div id="upload-photo">
                        <input type="file" name="photo" id="photo" />
                </div>
                ...

【问题讨论】:

  • 你有没有做过echo $_FILES["photo"]["type"]看看你在使用IE时得到了什么价值?
  • . _ . 非常适合在文档中表达感受,但对于实际代码而言则不然。
  • 除此之外,我会使用pathinfo 来确定文件名或扩展名。使用创意文件名应该比拥有 substr-functions 更健壮。
  • 尝试设置 $ext = strtolower($ext);在你做 substr... Mayde 你的扩展都是像 JPG 这样的大写字母,因为 php 区分大小写,这可能是潜在的问题。
  • . _ . 应该是. '_' .$newname 行上。

标签: php file-upload image-uploading


【解决方案1】:

我在使用 IE(尤其是 7 和 8)时遇到过类似的问题,通常是由于 IE 在上传 png 图像时触发的“image/x-png”MIME 类型。 尝试将其添加到您的 MIME 列表中

$_FILES["photo"]["type"] == "image/x-png"

认为 MIME 类型可能会被欺骗,并且它不是对图像的完全可靠的评估。您应该使用getimagesize() 之类的东西来检查真实图像,并使用pathinfo($file, PATHINFO_EXTENSION)(请参阅manual)从文件中获取扩展名;

【讨论】:

  • @oktopus 该死,我的意思是 xpng 不是 pjpeg,我搞砸了。无论如何,评估图像的理由仍然存在
  • 谢谢 Damien,我现在就给它一个破解。尽管 png 在 IE 上可以正常上传(据我所知,7-9),但 jpg 是否有不同的修复方法?
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
相关资源
最近更新 更多