asdf 安装的 PHP 上传文件大小限制

今天被一个问题折腾了好久,记录一下给后来人避坑。

事情是这样的,我用 Laravel 写了一个图片上传接口,本地 curl 测试完全正常,但前端一上传稍微大点的图片(5MB左右)就报错,而且报错信息特别迷惑------说什么 CORS 跨域问题,请求被重定向到首页了。

一开始我还以为是 CORS 没配好,或者 Nginx 的 client_max_body_size 没放开。结果这些都改了,还是不行。

后来仔细看浏览器 Network 面板,发现请求返回的是 302 重定向!但 curl 直接请求后端是正常的 201。这就奇怪了,同一个接口,curl 能用,浏览器不行?

突然想起来------PHP 本身也有上传大小限制啊!

跑了一下

复制代码
 php -i | grep upload_max_filesize

,果然:

复制代码
upload_max_filesize => 2M => 2M
post_max_size => 8M => 8M

好家伙,默认才 2M,难怪 5M 的图片传不上去。PHP 直接把请求拒了,Laravel 估计是捕获到异常然后重定向到首页了,所以浏览器看到的是 302。

但问题来了,我是用 asdf 装的 PHP,不是系统自带的。跑 php -i | grep "Loaded Configuration File" 显示 (none),压根没加载 php.ini!

这里要说一下 asdf 的 PHP 配置机制。asdf 装的 PHP 和系统装的不一样,它不会自动去读 /etc/php.ini 之类的位置。你得在它自己的安装目录下创建配置。

正确做法是这样:

  1. 先找到 asdf 的 PHP 装在哪

    复制代码
    asdf where php

我的是 /root/.asdf/installs/php/8.2.23

  1. 在这个目录下创建 conf.d 文件夹

    复制代码
    mkdir -p /root/.asdf/installs/php/8.2.23/conf.d
  2. 然后在里面创建一个 ini 文件,名字随便起

比如我创建了 uploads.ini,内容是:

复制代码
   upload_max_filesize = 50M
   post_max_size = 50M
   memory_limit = 256M
   max_execution_time = 300
  1. 重启你的 PHP 服务(我用的 supervisor)

    复制代码
    sudo supervisorctl restart stonegate-api
  2. 验证一下

    php -i | grep upload_max_filesize

应该显示 50M 了

这里有个坑要注意:有些配置是可以运行时改的(比如 upload_max_filesize),有些是编译时决定的(比如开启 redis 扩展)。上传大小限制属于前者,所以不用重新编译 PHP,直接改 ini 就行。

但如果你要开启某个扩展,那就得重新跑 asdf install php xxx 了,这是两码事。

总结一下这次踩的坑:

  1. 前端报 CORS 错误不一定是 CORS 的问题,可能是后端返回了重定向

  2. 浏览器和 curl 行为不一样时,要看实际的 HTTP 状态码

  3. asdf 装的 PHP 默认不加载 php.ini,得手动创建

  4. php.ini 要放在 asdf 的 PHP 安装目录下的 conf.d 里面

希望能帮到遇到同样问题的朋友,别像我一样绕了一大圈才发现是 PHP 配置的问题。

相关推荐
点心的游戏开发世界3 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
事圆则缓5 小时前
Kotlin 协程完全指南
开发语言·kotlin
我爱写代码i5 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
Java后端的Ai之路6 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
统计学小王子7 小时前
数学建模国赛倒计时4天——《统计模型精讲(混合效应模型R语言实现)》
开发语言·数学建模·r语言
知无不研7 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
郝学胜-神的一滴7 小时前
Qt 高级编程 045:坐标体系深度实战
开发语言·c++·windows·python·qt·程序人生
dsyyyyy11017 小时前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript
“AI国潮设计-小江”8 小时前
Python实战 | SDXL精准控制“普宁英歌舞×星空蛋糕”IP落地,附核心Prompt与商用授权思路
开发语言·人工智能·python·prompt·aigc
小刘在重生~10 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python