所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 管理

配置 php.ini 文件:在您的服务器上优化 PHP 的完整指南

php.ini 文件是 PHP 的主配置文件 — 是几乎每个现代网络应用程序的支柱。无论您运行的是 WordPress、Laravel、Magento 还是自定义应用程序,了解如何正确配置 php.ini 可以显著提高服务器的性能、加强安全性,并确保与您的软件堆栈的无缝兼容性。

本综合指南将引导您了解所有需要知道的内容:php.ini 的作用、如何找到它、如何安全地编辑它,以及如何验证您的更改是否正常工作。

1. php.ini 是什么以及为什么它很重要?

php.ini 文件是一个纯文本配置文件,PHP 每次初始化时都会读取它。它包含数百个指令 — 键值对,控制 PHP 运行时行为的几乎每个方面,包括:

  • 脚本的内存分配
  • 文件上传限制和 POST 数据大小
  • 错误报告级别和日志记录
  • 会话管理设置
  • 扩展加载(例如 PDO、cURL、OPcache)
  • 安全限制,例如 disable_functionsopen_basedir
  • 执行时间限制以防止失控脚本

正确配置这些设置不仅仅是为了方便 — 它直接影响应用程序的稳定性、安全态势和最终用户体验。PHP 设置配置不当是导致应用程序错误、文件上传失败、内存耗尽崩溃和可利用安全漏洞的主要原因。

如果您在 VPS 主机计划上托管 PHP 应用程序,您拥有完全的 root 访问权限来自由修改 php.ini — 让您完全控制 PHP 环境。

2. 定位 php.ini 文件

php.ini 文件的位置取决于您的操作系统、PHP 版本和正在使用的服务器 API (SAPI)(Apache mod_php、PHP-FPM 或 CLI)。以下是三种可靠的查找方法。

方法 1:使用命令行(最快的方法)

打开您的终端或通过 SSH 连接并运行:

php --ini

示例输出:

Configuration File (php.ini) Path: /etc/php/8.2/cli
Loaded Configuration File:         /etc/php/8.2/cli/php.ini
Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
Additional .ini files parsed:      /etc/php/8.2/cli/conf.d/10-opcache.ini, ...

> 重要提示: PHP 通常为不同的 SAPI 提供单独的 php.ini 文件。CLI 版本(/etc/php/8.2/cli/php.ini)在从命令行运行 PHP 时使用,而 Apache 或 PHP-FPM 版本(/etc/php/8.2/apache2/php.ini/etc/php/8.2/fpm/php.ini)用于网络请求。请始终根据您的使用情况编辑正确的文件。

方法 2:在浏览器中使用 phpinfo()

此方法显示您的网络服务器正在加载的确切 php.ini 文件——这可能与 CLI 版本不同。

步骤 1:在您的网络根目录中创建一个新文件:

sudo nano /var/www/html/info.php

步骤 2:添加以下内容:

<?php
phpinfo();
?>

步骤 3:保存文件,然后打开您的浏览器并导航到:

http://yourdomain.com/info.php

步骤 4:搜索输出顶部附近的“Loaded Configuration File”行。它将显示活跃 php.ini 文件的完整路径。

> ⚠️ 安全警告:使用后立即删除 info.php。此文件会暴露攻击者可以利用的敏感服务器配置详情。

sudo rm /var/www/html/info.php

方法 3:使用 php -r(快速单行命令)

php -r "echo php_ini_loaded_file();"

这会直接将加载的 php.ini 文件的路径打印到您的终端——无需创建文件。

按平台划分的常见 php.ini 位置

平台 / 设置典型 php.ini 路径
Ubuntu/Debian + Apache (PHP 8.2)/etc/php/8.2/apache2/php.ini
Ubuntu/Debian + PHP-FPM (PHP 8.2)/etc/php/8.2/fpm/php.ini
Ubuntu/Debian + CLI (PHP 8.2)/etc/php/8.2/cli/php.ini
CentOS/RHEL + Apache/etc/php.ini
cPanel/WHM/usr/local/lib/php.ini
Windows (XAMPP)C:xamppphpphp.ini
macOS (Homebrew PHP 8.2)/opt/homebrew/etc/php/8.2/php.ini

3. 编辑 php.ini 文件

第 1 步:首先创建备份

在进行任何更改之前,始终创建备份:

sudo cp /etc/php/8.2/apache2/php.ini /etc/php/8.2/apache2/php.ini.bak

这允许您在出现问题时快速恢复原始配置。

第 2 步:在文本编辑器中打开文件

使用 nano 获得初学者友好的体验:

sudo nano /etc/php/8.2/apache2/php.ini

或使用 vim 进行更高级的编辑:

sudo vim /etc/php/8.2/apache2/php.ini

第 3 步:导航和编辑指令

php.ini 文件很大(通常 1,500+ 行)。使用编辑器的搜索功能跳转到特定指令:

  • nano 中:按 CTRL + W,然后输入指令名称(例如 memory_limit
  • vim 中:按 /,然后输入指令名称

第 4 步:保存并退出

  • nano:CTRL + X,然后 Y,然后 Enter
  • vim:ESC,输入 :wq,然后按 Enter

4. 关键 php.ini 指令说明

以下是您应该了解和配置的最重要的 php.ini 指令的详细分解:

内存和资源限制

; Maximum memory a single PHP script can allocate
memory_limit = 256M

; Maximum time (in seconds) a script is allowed to run
max_execution_time = 60

; Maximum time PHP will spend parsing request data
max_input_time = 120

; Maximum number of input variables (important for complex forms)
max_input_vars = 3000

文件上传设置

; Whether file uploads are permitted
file_uploads = On

; Maximum size of an individual uploaded file
upload_max_filesize = 64M

; Maximum size of all POST data (must be >= upload_max_filesize)
post_max_size = 64M

; Maximum number of files that can be uploaded simultaneously
max_file_uploads = 20

> 经验法则: post_max_size 必须始终 等于或大于 upload_max_filesize。如果 post_max_size 较小,上传将无声地失败。

错误报告和日志记录

; ---- DEVELOPMENT ENVIRONMENT ----
; Show all errors on screen (never use in production)
error_reporting = E_ALL
display_errors = On
display_startup_errors = On

; ---- PRODUCTION ENVIRONMENT ----
; Log errors to a file, never display them to users
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.log

会话管理

; Where session data is stored on the server
session.save_path = "/var/lib/php/sessions"

; Session cookie lifetime in seconds (0 = until browser closes)
session.cookie_lifetime = 0

; Prevent JavaScript from accessing session cookies (XSS protection)
session.cookie_httponly = On

; Only send session cookies over HTTPS
session.cookie_secure = On

; Strict session ID mode (prevents session fixation attacks)
session.use_strict_mode = On

OPcache(性能助推器)

OPcache 通过在共享内存中存储预编译的脚本字节码来显著提高 PHP 性能:

opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1

5. 重启您的网络服务器

php.ini 的更改在您重启相关服务之前不会生效。使用适合您设置的相应命令:

Apache (mod_php)

sudo systemctl restart apache2
# or on CentOS/RHEL:
sudo systemctl restart httpd

Nginx + PHP-FPM

# Restart PHP-FPM (replace 8.2 with your PHP version)
sudo systemctl restart php8.2-fpm

# Restart Nginx
sudo systemctl restart nginx

优雅重载(零停机时间)

对于生产服务器,使用优雅重载来避免断开活跃连接:

# Apache graceful reload
sudo systemctl reload apache2

# PHP-FPM graceful reload
sudo systemctl reload php8.2-fpm

验证服务正在运行

sudo systemctl status apache2
sudo systemctl status php8.2-fpm

6. 验证您的更改

重启服务器后,使用以下方法之一确认您的新设置已激活:

方法 1:命令行 Grep

# Check memory_limit
php -i | grep memory_limit

# Check upload_max_filesize
php -i | grep upload_max_filesize

# Check multiple values at once
php -i | grep -E 'memory_limit|upload_max_filesize|post_max_size|max_execution_time'

方法 2:phpinfo() 页面

临时重新创建 info.php 文件(记住之后删除它),然后搜索您修改的指令。更改的值将出现在 “Local Value”“Master Value” 列中。

方法 3:PHP 单行命令

php -r "echo ini_get('memory_limit');"

7. 高级 php.ini 优化技巧

使用 .htaccess 覆盖 php.ini(仅限 Apache)

如果您在共享主机上或没有 root 访问权限,您可以通过 .htaccess 覆盖某些 php.ini 设置:

php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 120

> 注意:这仅在启用了 AllowOverride 且托管提供商允许 PHP 指令覆盖时才有效。

在 PHP 代码中使用 ini_set()

对于特定于应用程序的设置,您可以在 PHP 脚本中在运行时覆盖 php.ini 值:

<?php
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');
?>

每目录 php.ini 文件(PHP-FPM)

使用 PHP-FPM,您可以通过在 /etc/php/8.2/fpm/pool.d/ 中配置池文件,将不同的 php.ini 设置应用于不同的虚拟主机或目录。这在托管具有不同要求的多个应用程序时特别有用。

如果您管理多个 PHP 应用程序,带有 cPanel 的 VPS 可以通过图形界面更轻松地管理每个域的 PHP 设置,无需手动编辑配置文件。

8. 通过 php.ini 进行安全加固

正确配置 php.ini 是加强 PHP 环境抵御常见攻击的最有效方法之一。

禁用危险函数

; Prevent execution of system commands from PHP scripts
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source

限制文件系统访问

; Limit PHP file access to specific directories
open_basedir = /var/www/html:/tmp

隐藏 PHP 版本信息

; Don't expose PHP version in HTTP headers
expose_php = Off

禁用远程文件包含

; Prevent PHP from including remote URLs (common attack vector)
allow_url_fopen = Off
allow_url_include = Off

加强会话安全

session.cookie_httponly = On
session.cookie_secure = On
session.use_strict_mode = On
session.cookie_samesite = "Strict"

> 专业提示:如果您运行电子商务网站或处理敏感用户数据,请将加固的 php.ini 与有效的 SSL 证书配对,以加密传输中的所有数据。HTTPS 对于 session.cookie_secure = On 正常运行是必需的。

9. 常见 php.ini 错误避免

错误为什么这是个问题修复
在生产环境中设置 memory_limit = -1允许脚本消耗无限 RAM,导致服务器崩溃设置合理的限制,如 256M512M
在生产环境中设置 display_errors = On向用户暴露敏感文件路径和数据库凭证设置为 Off 并改用 log_errors = On
post_max_size < upload_max_filesize导致上传失败且无提示始终设置 post_max_sizeupload_max_filesize
编辑错误的 php.ini更改不会应用到网络请求使用 phpinfo() 确认网络服务器加载的是哪个文件
更改后未重启服务器旧设置保持活跃编辑后始终重启 Apache 或 PHP-FPM
在服务器上留下 info.php向攻击者暴露完整的服务器配置使用后立即删除
设置 allow_url_include = On启用远程文件包含 (RFI) 攻击始终保持此项 Off

10. 结论

掌握 php.ini 配置是任何系统管理员或网络开发人员的基本技能。正确的设置可以决定服务器是缓慢且易受攻击,还是快速、安全且生产就绪。

总结关键要点:

  • 始终备份 php.ini 后再进行更改
  • 确定正确的文件 — CLI 和网络服务器 SAPI 通常使用不同的 php.ini 文件
  • 调整资源限制memory_limitmax_execution_timeupload_max_filesize)以匹配应用程序的需求
  • 加强安全性,禁用危险函数、隐藏版本信息并限制文件访问
  • 启用 OPcache 以获得显著的性能提升
  • 在生产环境中不要显示错误 — 改为记录错误
  • 在每次更改后重启网络服务器,并使用 phpinfo()php -i 进行验证

您选择的托管环境在您对 PHP 配置的控制程度上也起着重要作用。使用 AlexHost 的专用服务器,您可以获得对服务器 PHP 配置的完全、无限制的访问权限 — 非常适合具有复杂要求的高流量应用程序。对于较小的项目或刚开始的团队,共享网络托管计划提供了一个托管环境,其中许多 PHP 设置已为您预先优化。

当应用程序发展、PHP 版本更新以及流量模式变化时,定期重新审视您的 php.ini 配置。一个调优良好的 PHP 环境不是一次性的设置 — 它是一个持续的实践,在性能、可靠性和安全性方面带来回报。