PHP 自动加载机制
当 PHP 处理请求时,它会自动在当前目录和所有父目录中查找 .user.ini 文件,并应用其中的配置。这意味着:
- 如果您将
.user.ini放在 Magento 2 根目录,它会影响所有请求 - 如果您放在特定子目录,它只影响该目录及其子目录的请求
Magento 2 目录结构中的位置
对于典型的 Magento 2 安装,您应该将 .user.ini 放在根目录:
/var/www/html/magento2/
├── .user.ini ← 放在这里
├── app/
├── pub/
├── var/
└── ...
创建和配置 .user.ini
在 Magento 2 根目录创建 .user.ini 文件:
cd /path/to/magento2
nano .user.ini
添加所需配置,例如增加内存限制:
; Magento 2 推荐的内存设置
memory_limit = 2G
max_execution_time = 1800
max_input_time = 180
realpath_cache_size = 10M
realpath_cache_ttl = 7200
opcache.enable = 1
opcache.memory_consumption = 512
如何理解「通过 .user.ini 修改内存」
1. 配置层级理解
PHP 配置按优先级从高到低:

2. 内存修改的实际过程
当您在 .user.ini 中设置 memory_limit = 2G:
- PHP 初始化:PHP 启动时读取主
php.ini文件 - 目录遍历:处理请求时,PHP 从当前脚本目录向上查找
.user.ini - 配置应用:找到
.user.ini后,应用其中的配置设置 - Magento 执行:Magento 2 在已调整的内存限制下运行
3. 验证配置是否生效
在 Magento 2 中创建测试文件验证配置:
php
<?php
// 在 pub/test-memory.php 创建文件
require_once '../app/bootstrap.php';
use Magento\Framework\App\Bootstrap;
use Magento\Framework\App\Http;
$bootstrap = Bootstrap::create(BP, $_SERVER);
$app = $bootstrap->createApplication(Http::class);
echo "Current memory limit: " . ini_get('memory_limit') . "\n";
echo "Max execution time: " . ini_get('max_execution_time') . "\n";
// 测试内存使用
$memory_usage = memory_get_usage(true);
$peak_memory = memory_get_peak_usage(true);
echo "Memory usage: " . round($memory_usage / 1024 / 1024, 2) . " MB\n";
echo "Peak memory usage: " . round($peak_memory / 1024 / 1024, 2) . " MB\n";
访问 http://your-magento-site.com/test-memory.php 查看输出。
完成后务必删除测试文件:
bash
rm /path/to/magento2/pub/test-memory.php
Magento 2 中更好的替代方案
虽然可以使用 .user.ini,但对于 Magento 2,以下方法更为常见和可靠:
1. 通过 Magento 引导文件设置
编辑 pub/index.php 和 pub/static.php 等入口文件,在开头添加:
php
<?php
// 在现有代码之前添加内存设置
ini_set('memory_limit', '2G');
ini_set('max_execution_time', 1800);
// ... 其他现有代码
2. 通过 PHP-FPM 池配置(推荐)
如果您使用 PHP-FPM,在池配置中设置更为合适:
ini
; /etc/php/8.1/fpm/pool.d/www.conf php_admin_value[memory_limit] = 2G php_admin_value[max_execution_time] = 1800 php_admin_value[realpath_cache_size] = 10M
3. 通过 .htaccess(仅适用于 Apache + mod_php)
在 Magento 2 的 .htaccess 文件中添加:
<IfModule mod_php7.c>
php_value memory_limit 2G
php_value max_execution_time 1800
</IfModule>
重要注意事项
- 性能影响:PHP 会在每个请求中检查
.user.ini文件是否被修改 - 安全性:确保
.user.ini不能被公开访问 - 配置限制:不是所有 PHP 指令都能在
.user.ini中使用 - 优先级:脚本中的
ini_set()调用会覆盖.user.ini的设置
总结
- Magento 2 不直接读取
.user.ini,但受益于 PHP 的自动加载机制 .user.ini修改内存意味着通过目录级别的 PHP 配置调整内存限制- 对于 Magento 2,更推荐使用 PHP-FPM 池配置或修改入口文件的方式
- 始终验证配置是否生效,特别是内存相关的设置
对于生产环境的 Magento 2 商店,建议使用 PHP-FPM 池配置来管理 PHP 设置,这样更稳定且性能更好。.user.ini 更适合开发环境或无法访问服务器主配置的情况。