【问题标题】:php image upload not working in landscape orientationphp图像上传在横向模式下不起作用
【发布时间】:2016-06-14 15:54:50
【问题描述】:

我有一个基本的 php 文件上传脚本,直到最近它一直运行良好。没有对上传脚本进行任何更改。通过测试/故障排除,我注意到如果 jpeg 图像方向为横向(宽于高)并且文件大于 4.5MB,则下载锁定在上传文件的 7% 左右。如果我将图像旋转为纵向并保持文件大小不变,或者如果我减小图像大小并将其保持为横向,则上传完成。

让我感到困惑的是,纵向的较大文件可以正常上传,将文件上传到服务器时图像方向重要吗?

首先我使用 Javascript 和 AJAX 来设置上传,然后调用 php 脚本。 Javascript/AJAX 是:

function uploadFile()
    {
    var formdata = new FormData();
    var location=document.getElementsByName("file");
    var file = location[0].files[0];
    formdata.append("file", file,location[0].id+"_"+date+"."+file.type.substring(file.type.indexOf("/")+1));
    var ajax = new XMLHttpRequest();
    _("progressBar").style.visibility="visible";
    ajax.upload.addEventListener("progress", progressHandler, false);
    ajax.addEventListener("load", completeHandler, false);
    ajax.addEventListener("error", errorHandler, false);
    ajax.addEventListener("abort", abortHandler, false);
    ajax.open("POST", "as_built_replace_uploader.php");
    ajax.send(formdata);
    }

我的上传PHP是:

    $filename = $_FILES["file"]["name"];
    $file_tmp_loc = $_FILES["file"]["tmp_name"]; // File in the PHP tmp folder
    $file_type = $_FILES["file"]["type"]; // The type of file it is
    $file_size = $_FILES["file"]["size"]; // File size in bytes
    $file_error_msg = $_FILES["file"]["error"]; // 0 for false... and 1 for true

    $wildcard="maps/".substr($filename,0,strpos($filename,"."))."*";
    foreach (glob($wildcard) as $path)
        {
        unlink($path);
        }
    if(move_uploaded_file($file_tmp_loc,"maps/".$filename))

【问题讨论】:

  • 请在您的问题中添加php文件上传脚本代码
  • 考虑到 PHP 在上传期间甚至没有读取文件,我会在其他地方搜索该问题。也许您有一个客户端库来处理图片或介于两者之间的非常挑剔的安全软件。 (我还注意到您阅读了$_FILES["file"]["error"],但似乎没有使用它——它甚至不是评论所说的 0 或 1。)
  • 一开始我使用 $_FILES["file"]["error"] 进行故障排除,但目前没有。那么你是说在我的 PHP 脚本启动之前的 AJAX 事务期间就发生了挂断吗?

标签: php upload


【解决方案1】:

正如@ÁlvaroGonzález 所观察到的,PHP 本身 在上传时甚至不会读取文件;它甚至不知道它是 JPEG,更不用说它的纵横比了。

所以某人在上传该文件时一定在对它做一些事情。可能我们正在研究一些过于聪明的防火墙规则对一些 JPEG 漏洞的不良影响。在添加一小段垃圾后尝试上传相同的文件。它将不再是 JPEG,但大多数 IDS 仍会“看到”里面的任何内容并做出反应。如果即使文件不再是图像,上传仍然阻塞,我相信这将是防火墙/IDS 干扰的有力论据。

与管理上传服务器的人交谈也可能有助于了解一些情况。

但在此之前,您绝对确定较大的文件可以正确上传吗?重要的是编码大小,而不是原始图像大小。在您的 php.ini 中检查 upload_max_filesizepost_max_size

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多