php图片上传无法横向展开

时间:2016-06-14 15:54:51

标签: php upload

我有一个基本的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))

1 个答案:

答案 0 :(得分:0)

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

所以某人必须在上传文件时对该文件执行某些操作。可能我们正在研究一些针对某些JPEG漏洞的过于聪明的防火墙规则的不良影响。尝试使用一小块垃圾预先添加相同的文件。它将不再是JPEG,但大多数IDS仍会“看到”内部的任何内容,并作出反应。如果上传仍然阻止,即使文件不再是图像,我相信这将是防火墙/ IDS干扰的一个有力论据。

与管理上传服务器的人交谈也可能有助于揭开一些亮点。

但在此之前,您是否完全确定这样大型文件的上传方式是否正确?重要的是编码尺寸,而不是原始图像尺寸。检查php.ini中的upload_max_filesizepost_max_size