RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 846874
Accepted
Vladik
Vladik
Asked:2020-06-26 18:31:39 +0000 UTC2020-06-26 18:31:39 +0000 UTC 2020-06-26 18:31:39 +0000 UTC

php 中的原始文件上传无法正常工作。帮助

  • 772

这样的情况。我正在为我的母亲制作一个网站,她要求人们可以在完成工作后为她留下评论。一般来说,我使用最简单的方法来上传照片,结果如下:当上传最大 1mb 的照片时,没有问题。(我将限制器更改为 5mb)当上传超过 1mb 时,显示上传图像并用照片名称填充 INPUT 的脚本会陷入永恒的 loding,尽管这不会以任何方式发生......而且文件本身是上传到主机没有问题,但不是在1024px处被截断,而是上传原创。但!如果我们以 PNG 格式而不是 jpg 格式上传,那么一切正常。

如果在手机的帮助下可以正常运行。还是下载rar,怎么限制呢?

这是一个页面,您可以在其中看到作品https://cats-dogs.com.ua/portfolio

这是文件中的内容 ( https://cats-dogs.com.ua/portfolio )

<script type="text/javascript"> 

        function hideBtn(){
            $('#upload').hide();
            $('#res').html("<center><div class='cssload-loader'>Идет загрузка файла</div></center>");
        }

        function handleResponse(mes) {
            $('#upload').show();
            if (mes.errors != null) {
                $('#res').html("<p>Возникли ошибки во время загрузки файла: </p>" + mes.errors);
            }   
            else {
                $('#res').html("<p>Спасибо! Фото загружено. Осталось написать и отправить комментарий :)</p><p style='text-align:left;'><img src='https://cats-dogs.com.ua/images/new/" + mes.name + "' width='220'></p><p><input type='hidden' id='img' name='img' value='" + mes.name + "' /></p>");  
                $('.img input').val(mes.name);
                $('#foto').hide();
            }   
        }

        $(function() {

$("#form").load("form-img-comm.php");

}); 

    </script>

<div id="form"></div>
 <iframe id="hiddenframe" name="hiddenframe" style="width:0px; height:0px; border:0px"></iframe>


<div id="res"></div>    

         <p class="img">
           <input value="" type="hidden" name="photoreport">
         </p>   

在单独的文件中形成:

<form action="uploadimgcomm.php" method="post" target="hiddenframe" enctype="multipart/form-data" onsubmit="hideBtn();">
<input type="file" id="userfile" name="userfile"  />
<input type="submit" name="upload" id="upload" value="Загрузить"  />
</form>

以及加载器文件本身:

<?php 

if(isset($_POST['upload'])){
    //Список разрешенных файлов
    $whitelist = array(".jpg", ".JPG", ".png");     
    $data = array();
    $error = true;

    //Проверяем разрешение файла
    foreach  ($whitelist as  $item) {
        if(preg_match("/$item\$/i",$_FILES['userfile']['name']) && $_FILES['userfile']['size'] <= 5242880 ) $error = false;
    }




    if(!$error) { 

        $folder =  'images/';//директория в которую будет загружен файл


if($_FILES['userfile']['tmp_name']){


$filename = $_FILES['userfile']['name'];

        $source = $_FILES['userfile']['tmp_name'];  
        $target = $folder . $filename;

        move_uploaded_file($source, $target);



$final_width_of_image = 1024;
//$final_width_of_thumbs = 750;



    if(preg_match('/[.](jpg)$/', $filename)) {
        $im = imagecreatefromjpeg($folder . $filename);
    } else if (preg_match('/[.](jpeg)$/', $filename)) {
        $im = imagecreatefromjpeg($folder . $filename);
    } else if (preg_match('/[.](JPG)$/', $filename)) {
        $im = imagecreatefromjpeg($folder . $filename);
    } else if (preg_match('/[.](JPEG)$/', $filename)) {
        $im = imagecreatefromjpeg($folder . $filename);
    } else if (preg_match('/[.](gif)$/', $filename)) {
        $im = imagecreatefromgif($folder . $filename);
    } else if (preg_match('/[.](GIF)$/', $filename)) {
        $im = imagecreatefromgif($folder . $filename);
    } else if (preg_match('/[.](png)$/', $filename)) {
        $im = imagecreatefrompng($folder . $filename);
    } 

    $ox = imagesx($im);
    $oy = imagesy($im);

if ($ox > 1024) {   
    $nx = $final_width_of_image;
    $ny = floor($oy * ($final_width_of_image / $ox));
}   
    $nm = imagecreatetruecolor($nx, $ny);

    imagecopyresampled($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);

    imagejpeg($nm, $folder . $filename);


        if($filename){




                $data = $_FILES['userfile'];
            }
            else {  
                $data['errors'] = "Во время загрузки файла произошла ошибка";
            }
        }
        else {  
            $data['errors'] = "Файл не  загружен";
        }
    }
    else{

        $data['errors'] = 'Вы загружаете запрещенный тип файла или картинка слишком большая (макс. размер 5мб)';
    }




    //Формируем js-файл    
    $res = '<script type="text/javascript">';
    $res .= "var data = new Object;";
    foreach($data as $key => $value){
        $res .= 'data.'.$key.' = "'.$value.'";';
    }
    $res .= 'window.parent.handleResponse(data);';
    $res .= "</script>";

    echo $res;

}
else{
    die("ERROR");
}

?>
php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    китайец ИзКитая
    2020-06-27T12:59:11Z2020-06-27T12:59:11Z

    白名单变量对你没用,你创建它,但为什么不清楚,因为你有一个完全无法理解的正则表达式检查。

    if(preg_match('/[.](jpg)$/', $filename)) {
            $im = imagecreatefromjpeg($folder . $filename);
        } else if (preg_match('/[.](jpeg)$/', $filename)) {
            $im = imagecreatefromjpeg($folder . $filename);
        } else if (preg_match('/[.](JPG)$/', $filename)) {
            $im = imagecreatefromjpeg($folder . $filename);
        } else if (preg_match('/[.](JPEG)$/', $filename)) {
            $im = imagecreatefromjpeg($folder . $filename);
        } else if (preg_match('/[.](gif)$/', $filename)) {
            $im = imagecreatefromgif($folder . $filename);
        } else if (preg_match('/[.](GIF)$/', $filename)) {
            $im = imagecreatefromgif($folder . $filename);
        } else if (preg_match('/[.](png)$/', $filename)) {
            $im = imagecreatefrompng($folder . $filename);
        } 
    

    你需要像这样修改你的白名单

    $whitelist = array('png', 'PNG', 'JPG', 'jpg', 'jpeg', 'JPEG');
    
    $FileExtension = pathinfo($filename, PATHINFO_EXTENSION);
    if(!in_array($FileExtension, $whitelist)) {
    echo "Формат файла запрещен";                
    }
    else
    {
    echo "Формат файла РАЗРЕШЕН";
    // и если так то продолжаем выполнять скрипт обработки
    }
    

    然后,将文件上传到服务器后,根据我的记忆裁剪大小,它是这样完成的

    下面的代码是一个例子,需要调整

    使用想象

    $image = new Imagick($_SERVER['DOCUMENT_ROOT'].'/image/'$filename');
    
    // меняем размер уже загруженной на сервер картинки
    $image->resizeImage(1024, imagick::FILTER_UNDEFINED, 0.9, true);
    
    // перезаписываем файл с новым размером
    $image>writeImage($_SERVER['DOCUMENT_ROOT'].'/image/'$filename');
    

    应该删除正则表达式格式检查。

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5