zoukankan      html  css  js  c++  java
  • preg_*匹配的字符串长度限制问题以及nginx,php上传文件过大问题

      问题背景

         使用插件上传高清图片,用的插件base64转码的,上传失败,接口提示:413 (Request Entity Too Large)

      问题分析与解决

        首先想到的是nginx和php的服务器配置。

        nginx配置:在http{...    ...}添加如下配置

    1 #允许客户端上传文件的最大限制单位是M
    2 client_max_body_size 20m;

        PHP配置

    1 #修改配置文件
    2 upload_max_filesize = 20M

        修改之后服务器提示是没了,但是图片也没有上传成功,一步步定位发现,是过滤base64图片数据出了问题。

    1 $imgdata=base64_decode(preg_replace('/data(.*?)base64,/','',$data));

         当图片数据过大的时候,$imgdata为空,但是实际图片base64数据是有的,怀疑preg_replace函数匹配的字符串长度有限制,查阅资料确实有相关的问题。

      解决发放①(修改PHP配置):

         php.ini的文件配置

    #对于字符串长度的限制
    ;pcre.backtrack_limit=100000

        为了上传图片没必要修改PHP配置文件,在修改控制器的脚本文件修改即可。

    ini_set('pcre.backtrack_limit', 9999999999);

       解决问题②(修改代码):

        preg_*本身就不是最高效的写法,官方也建议使用其他函数代替。于是修改代码

    #用字符串函数代替
    $imgdata=base64_decode(str_ireplace('base64,','',strstr($data,'base64,')));

         上传图片成功,问题解决。

  • 相关阅读:
    简单工厂模式
    工厂方法模式
    Linq对DatatTable进行分组统计
    微软现在支持某一路径下?占位符的文件扫描
    Spring MVC中InternalResourceViewResolver视图解析器的默认行为
    什么是 HandlerMethod ?
    03基于NIO的聊天室案例
    01基于BIO的多人聊天室
    02基于BIO的多线程客户端服务器通信案例
    java8新特性学习
  • 原文地址:https://www.cnblogs.com/IT--Loding/p/6699466.html
Copyright © 2011-2022 走看看