
在 WordPress 上收到"Fatal error: Allowed memory size of X bytes exhausted",或者文件上传大小超限而无法上传?这些问题可以通过调整 PHP.ini 设置轻松解决。本指南涵盖如何在 DirectAdmin 共享主机上配置 PHP.ini — 从基础知识到 WordPress、WooCommerce 和任何 CMS 的推荐设置。
什么是 PHP.ini?
PHP.ini 是 PHP 的主配置文件,控制最大内存使用量、最大上传文件大小、最大脚本执行时间和错误报告等行为。在共享主机上,每个虚拟主机(域名)都可以有自己的 PHP.ini,让您按网站自定义 PHP 设置,而不会影响同一服务器上的其他帐户。
在 DirectAdmin 上编辑 PHP.ini 的三种方法
方法 1:DirectAdmin PHP 设置面板
最简单的方法 — 无需编辑文件:
- 登录到 DirectAdmin
- 转到 Advanced Features → PHP Settings
- 使用表单调整值(memory_limit、upload_max_filesize 等)
- 点击 Save
方法 2:在 public_html 中创建 php.ini
在 public_html 文件夹(或运行您的网站的任何文件夹)内创建名为 php.ini 的文件,然后添加所需的值:
方法 3:通过 .htaccess(mod_php / CGI)
某些服务器配置支持通过 .htaccess 设置 PHP 设置:
注意:.htaccess 方法仅适用于 mod_php。如果您的主机使用 PHP-FPM(在较新的 DirectAdmin 安装上很常见),请改用 php.ini 文件方法。
关键 PHP.ini 设置说明
| 设置 | 默认值 | WordPress 推荐 | 说明 |
|---|---|---|---|
| memory_limit | 128M | 256M | PHP 脚本可以使用的最大内存 |
| upload_max_filesize | 2M | 64M | 单个上传文件的最大大小 |
| post_max_size | 8M | 64M | 最大 POST 请求大小(必须超过 upload_max_filesize) |
| max_execution_time | 30 | 300 | 脚本可以运行的最大秒数 |
| max_input_time | 60 | 300 | 解析输入数据的最大秒数 |
| max_input_vars | 1000 | 3000 | 最大输入变量数(对于复杂表单) |
WordPress 推荐设置
WooCommerce 推荐设置
DirectAdmin 上常见 PHP.ini 指令及推荐值
在 AsiaGB 的 DirectAdmin 上管理主机时,您实际需要修改的 PHP 指令通常归结为以下五个设置。此表总结了标准 PHP 默认值与在共享主机上为 WordPress 和 WooCommerce 推荐的值,这样您可以一次性配置所有内容,而不是逐个猜测值。
| 指令 | 默认值 | WordPress | WooCommerce | 作用 |
|---|---|---|---|---|
| memory_limit | 128M | 256M | 512M | PHP 脚本每个请求可以使用的内存上限 — 页面构建器和备份工具等重量级插件在这里消耗最多 |
| upload_max_filesize | 2M | 64M | 128M | 单个上传文件的最大大小 — 如果无法上传主题/插件压缩包或高分辨率图像,请增加此值 |
| post_max_size | 8M | 64M | 128M | 最大 POST 请求大小 — 必须始终 ≥ upload_max_filesize,否则即使 upload_max_filesize 足够高,大文件上传也会失败 |
| max_execution_time | 30 | 300 | 600 | 脚本被终止之前可以运行的最大秒数 — 产品导入和大型数据库更新需要提高此值 |
| max_input_vars | 1000 | 3000 | 5000 | 每个请求的最大输入变量数 — 具有长设置页面(数百个选项)的主题/插件达到 1000 时会导致无法保存所有值 |
提示:始终将 post_max_size 设置为略高于 upload_max_filesize(例如 64M/68M),因为 POST 请求包括其他表单字段,而不仅仅是文件本身。
在 DirectAdmin 中编辑 PHP.ini(自定义 PHP 设置 / .user.ini)
除了标准的 PHP 设置菜单外,运行 PHP-FPM 的较新 DirectAdmin 安装也支持通过 .user.ini 文件进行配置,当您的主机不使用 mod_php 时,这比 .htaccess 更灵活、更可靠。您可以选择最适合您的方法。
通过 DirectAdmin 自定义 PHP 设置菜单
某些 DirectAdmin 版本公开了自定义 PHP / PHP 设置区域,您可以直接输入指令,无需自己创建文件:
- 登录 DirectAdmin,转到帐户管理器 → 域名设置,然后选择域名
- 为该域名打开PHP 版本 / PHP 设置部分
- 在"自定义设置"字段中输入您的指令,每行一个,例如
memory_limit=256M - 点击保存 — 值立即应用于该域名,不影响帐户中的其他域名
通过 .user.ini 文件(推荐用于 PHP-FPM)
如果您的主机运行 PHP-FPM(较新 DirectAdmin 上的默认值),请在 public_html 中创建名为 .user.ini 的文件而不是 php.ini — DirectAdmin 会自动读取它:
; .user.ini — 放在 public_html 中
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 68M
max_execution_time = 300
max_input_vars = 3000
重要:.user.ini 的更改不会像 php.ini 那样立即生效,因为 PHP-FPM 根据 user_ini.cache_ttl(通常 300 秒)对其进行缓存。如果您看不到更改,请等待约 5 分钟或从 DirectAdmin 重启 PHP-FPM。
WordPress / WooCommerce 需要的值
WordPress 和 WooCommerce 都发布了列出最小值的服务器要求。设置较低的值仍可能有效,但在高负载下存在出错的风险 — 例如,同时更新许多插件或导入数千个产品。
WordPress(通用网站 / 博客 / 企业网站)
- memory_limit:256M — 足以支持 WordPress 加上典型的主题和插件(WordPress.org 的声称最小值是 64M,但实际上您应该设置 256M)
- upload_max_filesize / post_max_size:64M — 处理上传大多数主题、插件和媒体文件
- max_execution_time:300 — 防止导入/导出和自动更新工作中途被中断
- max_input_vars:3000 — 对于具有长 Customizer 或 Theme Options 页面的主题至关重要
WooCommerce(在线商店)
- memory_limit:512M — 具有数百到数千个产品以及支付/运输插件的商店显然需要比普通 WordPress 网站更多的内存
- upload_max_filesize / post_max_size:128M — 支持导入大型产品目录 (CSV) 和许多产品图像
- max_execution_time:600 — 产品导入和库存同步可能需要很长时间
- max_input_vars:5000 — WooCommerce 设置页面加上扩展插件包含大量变量
WooCommerce 在管理员中有一个状态 → 系统状态页面,显示您当前的 PHP 值,并用红色标记低于建议的任何设置。在那里检查比打开 phpinfo() 快。
检查值 (phpinfo) + 常见问题 (413、白屏、超时)
更改值后,始终确认它们确实生效了 — 有时值被服务器覆盖,或文件位于错误的文件夹中。最准确的检查是上面所述的 phpinfo()。查看本地值列(适用于您的网站的值)与主值(服务器级别的值)。
HTTP 413 请求实体过大
这出现在上传大文件时,服务器在 PHP 甚至到达之前返回 413。原因是网络服务器级别(Nginx/Apache)的限制,不仅仅是 PHP。同时提高 upload_max_filesize 和 post_max_size,如果问题仍然存在,请要求支持团队相应地调整 client_max_body_size(Nginx)。
白屏死机(空白页)
没有错误的空白页通常是由于 memory_limit 在过程中用尽。将其提高到 256M 或 512M,然后临时启用 display_errors(或检查 DirectAdmin 中的错误日志)以确认真正的原因。切勿在生产环境中永久启用 display_errors。
超过最大执行时间 / 网关超时
运行时间超过 max_execution_time 的脚本被杀死并出现致命错误,而 504 网关超时发生在网络服务器级别。对于繁重工作,将 max_execution_time 提高到 300–600,并考虑将大型导入分成较小的批次,而不是一次性运行所有导入。
检查当前 PHP.ini 值
在 public_html 中创建名为 phpinfo.php 的文件以查看使用中的实际 PHP 设置:
访问 yourwebsite.com/phpinfo.php 并搜索您需要的设置。检查后立即删除此文件 — 保留它可访问存在安全风险。
常见 PHP 错误和修复
- 致命错误:允许的内存大小已用尽 — 将
memory_limit增加到 256M 或 512M - 超过最大文件大小 — 同时增加
upload_max_filesize和post_max_size - 超过最大执行时间 30 秒 — 对于长时间运行的脚本,将
max_execution_time增加到 300 或更多
AsiaGB 主机支持 PHP 7.4、8.2 和 8.3。您可以从 DirectAdmin 切换 PHP 版本,并为每个域名独立配置 PHP.ini。计划从 500 泰铢/年开始,包含 SSD 存储、50,000 个 inode 和 99% 正常运行时间。
其他流行 CMS 的 PHP.ini 设置(Joomla、Magento、Laravel)
WordPress 和 WooCommerce 只是在共享主机上运行的众多 CMS 平台和框架中的两个。其他系统也受益于调整的 PHP.ini 设置,特别是在处理大型数据集或使用重量级库时。
Joomla CMS
Joomla 资源要求与 WordPress 类似,特别是在安装了许多扩展时。推荐值:
; Joomla 推荐
memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 300
max_input_vars = 3000
Magento / Adobe Commerce
Magento 是一个高资源消耗的电子商务平台。编译主题和部署静态内容对内存和执行时间都特别要求高:
; Magento 推荐
memory_limit = 1024M
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 900
max_input_vars = 10000
realpath_cache_size = 10M
realpath_cache_ttl = 7200
注意:Magento 在共享主机上通常由于资源限制而在性能方面苦恼。为了获得完整性能,请考虑使用 VPS,其中内存和 CPU 完全由您控制。
Laravel 和现代 PHP 框架
Laravel 和其他现代 PHP 框架(Symfony、CodeIgniter)需要合理的 PHP.ini 值来运行 Composer 安装和 Artisan 命令而不会触及限制:
; Laravel / PHP 框架
memory_limit = 512M
max_execution_time = 300
max_input_vars = 5000
upload_max_filesize = 64M
post_max_size = 68M
PHP.ini 安全相关设置
除了内存和上传限制外,PHP.ini 还控制几个与安全相关的指令,您应该在任何生产网站上正确配置这些指令。保留默认设置可能会向攻击者暴露服务器信息或允许错误消息泄漏敏感数据。
在生产环境中禁用 display_errors
display_errors 指令在实时网站上应始终处于关闭状态。PHP 错误消息可能会泄露文件路径、数据库表名称和其他攻击者可以利用的敏感详细信息:
; 生产安全设置
display_errors = Off
log_errors = On
error_log = /home/username/logs/php_error.log
expose_php = Off
安全的会话和文件上传设置
对于任何接受用户文件上传或运行身份验证会话的网站,这些补充加强了默认 PHP 行为:
; 会话安全
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
session.cookie_samesite = Strict
提示:设置 expose_php = Off 会从 HTTP 响应头中删除 PHP 版本,使自动化扫描程序更难识别您的 PHP 版本并针对特定版本的漏洞。
PHP.ini 配置:比较托管平台
每个控制面板和托管平台对 PHP.ini 管理的方式略有不同。下表总结了每个平台上可用的实用方法,因此无论您使用 DirectAdmin、cPanel、Plesk 还是 VPS,您都可以应用正确的技术。
| 平台 / 控制面板 | 主要方法 | 替代方案 | 注释 |
|---|---|---|---|
| DirectAdmin (AsiaGB) | PHP 设置面板 | .user.ini 在 public_html 中 |
PHP-FPM:使用 .user.ini;CGI:使用 php.ini |
| cPanel | MultiPHP INI 编辑器 | php.ini 通过文件管理器 |
图形界面编辑器产生相同的结果 |
| Plesk | PHP 设置 → 自定义 | php.ini 在文档根目录中 |
Plesk 分别管理 PHP-FPM 池 |
| VPS(根访问权限) | 编辑 /etc/php/8.x/fpm/php.ini |
PHP-FPM 池配置 | 完全控制,无提供商政策限制 |
如果您的网站需要超过 512M 的内存或需要共享主机无法提供的自定义 PHP 配置,AsiaGB VPS 以 500 泰铢/月起价为您提供完全的根访问权限。
关于 DirectAdmin 上 PHP.ini 的常见问题
php.ini 和 .user.ini 有什么区别 — 我应该使用哪一个?
两者的工作方式类似,在域级别覆盖 PHP 值,但 .user.ini 是 PHP-FPM 的标准文件(在较新的 DirectAdmin 上的默认值),而每个文件夹的 php.ini 通常与 CGI/FastCGI PHP 一起使用。如果您不确定您的主机使用哪一个,请先尝试 .user.ini,因为它支持 PHP-FPM,这是当今最常见的设置。
我在 DirectAdmin 中更改了值,但 phpinfo 仍然显示旧值?
三个常见原因:(1) .user.ini 文件由 PHP-FPM 缓存 — 等待约 5 分钟或重启 PHP-FPM;(2) 文件在错误的文件夹中 — 它必须位于实际运行您的网站的 public_html 中;(3) 该值在服务器级别被锁定,在 phpinfo 中的"主值"列中可见。在最后一种情况下,请联系支持。
设置过高的 memory_limit 会浪费资源吗?
memory_limit 是一个上限,而不是永久保留的内存。PHP 只使用脚本实际需要的内存。设置 256M 并不意味着每个请求都消耗 256M — 它只允许真正繁重的脚本达到该上限。在共享主机上,您可以设置的最大值已被提供商的政策限制。
当我在 DirectAdmin 中更改 PHP 版本时,我的 PHP.ini 值会消失吗?
否 — public_html 中的 .user.ini 或 php.ini 文件保持完整,并立即应用于新的 PHP 版本。但是,请验证您的指令在较新的 PHP 版本中仍然有效,因为某些指令可能已被弃用或删除。
PHP 7.4 / 8.2 / 8.3 主机
灵活的 PHP.ini 配置、高内存限制,以及对 WordPress、WooCommerce 和任何 CMS 的支持。从 500 泰铢/年开始。
查看主机计划