PHP执行时间与内存限制优化,新手也能改的实操教程
很多新手站长在部署PHP程序(比如WordPress、ThinkPHP)时,经常会遇到“Fatal error: Maximum execution time exceeded”或“Allowed memory size exhausted”这类报错。
简单说,就是PHP脚本运行时间太长,或者用内存太多,被系统强制终止了。
本文从零开始,教你找到PHP配置文件、修改关键参数,并验证修改是否生效。
无论你用命令行还是宝塔面板,都能直接照做。
先弄清两个参数的作用
- max_execution_time:单个PHP脚本允许执行的最大秒数。默认值通常是30秒,适合简单页面。如果你的程序需要大量计算或长时间等待(比如导入数据、生成报表),就可能超时。
- memory_limit:单个PHP脚本允许占用的最大内存。默认值一般是128M或256M。图片处理、大文件解析等场景容易超出限制。
优化这两个参数,就是根据你的需求适当增大数值。
但注意,不要无脑设成无限大,否则可能会拖垮服务器。
方法一:直接修改 php.ini 文件(通用)
首先,找到php.ini文件位置。
登录服务器(SSH),执行:
php --ini
输出中会显示 Loaded Configuration File 的路径,例如 /etc/php/7.4/cli/php.ini。
注意:这个对应的是命令行模式;
如果你是运行网页(通过Apache/Nginx),要修改Web服务器所使用的php.ini,通常路径类似 /etc/php/7.4/apache2/php.ini 或 /etc/php/7.4/fpm/php.ini。
不确定的情况下,在网站根目录创建一个 phpinfo.php 文件,内容:
访问该文件,查找“Loaded Configuration File”,就能看到当前使用的php.ini绝对路径。
找到后,用文本编辑器打开(例如nano):
sudo nano /etc/php/7.4/apache2/php.ini
按 Ctrl+W 搜索 max_execution_time,修改为:
max_execution_time = 120
(120秒,可根据需要改成300等)
再搜索 memory_limit,修改为:
memory_limit = 256M
(256M,也可改成512M、1024M等)
保存文件(Ctrl+X,然后 Y,回车)。
修改后必须重启Web服务器或PHP-FPM:
- Apache:
sudo systemctl restart apache2 - Nginx + PHP-FPM:
sudo systemctl restart php7.4-fpm(版本号换成你自己的)
方法二:宝塔面板可视化调整(新手首选)
宝塔面板用户不用去翻配置文件,直接在后台改即可。
- 登录宝塔面板,进入左侧“软件商店”。
- 找到你使用的PHP版本(例如PHP 7.4),点击“设置”。
- 在弹出的窗口中选择“配置文件”选项卡。
- 直接编辑显示出的 php.ini 内容:搜索
max_execution_time和memory_limit,修改数值。 - 点击“保存”后,面板会自动重启PHP服务,无需手动操作。
注意:宝塔面板的 php.ini 修改后立即生效,不需要额外重启Web服务器。
高频问题与避坑
Q:我改完数值,为什么还是提示超时?
A:可能你改的是CLI版php.ini,而网站用的是FPM版。请先通过phpinfo()确认当前加载的配置文件路径,再修改对应的文件。
Q:设置成0就永远不超时吗?
A:max_execution_time = 0 确实表示无限制,但强烈不推荐。一旦死循环脚本会卡死PHP进程,影响整个网站。建议设置一个合理的大数值(比如300)。
Q:内存限制设成 -1 代表无限制?
A:是的。但同样风险很大,最好设置一个具体数值,例如1024M。
Q:修改后phpinfo()仍显示旧值?
A:确认你重启了正确的服务。另外,检查是否在多个php.ini中都有配置,优先级最高的那个才会生效。对于Apache mod_php,需要重启Apache;对于PHP-FPM,需重启php-fpm。
避坑提醒: 有些程序(如WordPress)还支持在 wp-config.php 中添加代码来临时调整执行时间和内存限制,但那只能影响该程序的前端请求,后台任务(如插件更新)仍受php.ini限制。
建议优先修改php.ini,全局生效。
修改后的验证方法
- 简单验证:重新访问phpinfo()页面,搜索
max_execution_time和memory_limit,看数值是否变成你修改后的值。 - 压力测试:如果你有原本超时的脚本,重新运行一下,看是否正常完成。
- 命令行验证:执行
php -i | grep -E "max_execution_time|memory_limit"可以看到CLI模式的值。但注意这不代表Web模式。
建议步骤:修改完php.ini → 重启服务 → 刷新phpinfo()确认 → 跑一遍之前报错的程序。
如果一切正常,优化完成。
如果你正在处理PHP执行时间与内存限制优化,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
多数时候,问题出在修改错了php.ini或没重启服务,检查这两点就能解决90%的疑惑。