15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
01.11.2024

如何在您的托管环境中更改 PHP 版本(完整指南)

管理您的PHP版本是任何网站所有者或开发人员最关键的管理任务之一。无论您是升级以利用最新的性能改进、为了向后兼容性而降级,还是修补安全漏洞,了解如何在不同的托管环境中切换PHP版本是一项必不可少的技能。本综合指南将引导您了解所有可用的方法——从cPanel的图形界面到VPS托管和专用服务器上的命令行工具。

目录

  1. 为什么PHP版本管理很重要
  2. 理解PHP版本和兼容性
  3. 方法1:通过cPanel(MultiPHP管理器)更改PHP版本
  4. 方法2:通过.htaccess(Apache)更改PHP版本
  5. 方法3:通过命令行(VPS/专用服务器)更改PHP版本
  6. 方法4:通过php.ini更改PHP版本
  7. 如何验证您的活跃PHP版本
  8. 切换PHP版本后的常见错误
  9. PHP版本管理的最佳实践
  10. 结论

1. 为什么PHP版本管理很重要 {#why-it-matters}

PHP为超过77%的具有已知服务器端语言的网站提供支持,包括WordPress、Joomla、Drupal和Magento等主要平台。每个主要PHP版本都引入了重大变化:

  • 性能提升: 由于JIT(即时编译)编译器的存在,PHP 8.x的速度比PHP 5.x或7.x快得多。
  • 安全补丁: 较旧的PHP版本最终会达到生命周期结束(EOL),不再接收安全更新,使您的网站面临风险。
  • 应用兼容性: 一些较旧的插件、主题或自定义应用程序是为特定PHP版本编写的,在较新版本上可能会出现问题。
  • 托管合规性: 许多托管提供商强制执行最低PHP版本要求以维持服务器安全标准。

如果不主动管理您的PHP版本,可能会导致功能损坏、安全漏洞或网站完全停机。了解如何控制此设置——无论您使用哪种托管类型——对任何认真的网络管理员来说都是必不可少的。

2. 理解PHP版本和兼容性 {#understanding-versions}

在进行任何更改之前,了解PHP发布生命周期以及版本的结构方式很重要。

PHP版本编号

PHP遵循主版本.次版本.补丁版本控制方案:

组件示例含义
主版本8重大架构更改,可能存在破坏性更改
次版本8.2新功能、向后兼容的改进
补丁8.2.10仅限错误修复和安全补丁

PHP支持生命周期

每个PHP次版本都会获得:

  • 主动支持约2年(错误修复+安全补丁)
  • 仅安全支持
  • 生命周期结束(EOL)

当前支持的PHP版本(截至2024–2025)

PHP版本状态备注
PHP 8.3主动支持最新稳定版本
PHP 8.2主动支持推荐用于大多数应用程序
PHP 8.1仅安全仍然广泛使用
PHP 8.0EOL避免——没有安全补丁
PHP 7.4EOL仅限旧版支持
PHP 7.3及以下EOL强烈不建议

> 经验法则: 始终运行您的应用程序官方支持的最高PHP版本。如果您的CMS或框架支持PHP 8.2,就没有理由运行PHP 7.4。

3. 方法1:通过cPanel(MultiPHP管理器)更改PHP版本 {#cpanel-method}

cPanel是使用最广泛的托管控制面板,它提供两个内置的PHP版本管理工具:MultiPHP管理器(服务器范围或按域)和MultiPHP INI编辑器(用于微调PHP设置)。如果您使用的是带cPanel的VPS,两个工具都可供您使用。

步骤1:登录cPanel

  1. 打开浏览器并导航到您的cPanel登录URL:
    https://yourdomain.com:2083(安全,推荐)
    https://yourdomain.com/cpanel
  • 或直接IP:https://your-server-ip:2083
    1. 输入您的cPanel用户名密码
    2. 点击登录

    步骤2:打开MultiPHP管理器

    1. 在cPanel仪表板中,滚动到软件部分。
    2. 点击MultiPHP管理器

    > 替代方案: 某些cPanel设置将其标记为选择PHP版本PHP配置PHP选择器(后者在基于CloudLinux的共享托管中很常见)。界面可能略有不同,但过程相同。

    步骤3:选择您的域和PHP版本

    在MultiPHP管理器界面中:

    1. 您将看到您帐户上托管的所有域和子域的列表。
    2. 勾选您要修改的域旁边的复选框。
    3. 从页面顶部的PHP版本下拉菜单中,选择您所需的PHP版本(例如PHP 8.2)。
    4. 点击应用

    > 重要: 如果您使用的是共享托管帐户,可用的PHP版本由您的托管提供商确定。如果您需要未列出的版本,请联系您的主机支持团队或考虑升级到VPS托管计划,在该计划中您可以完全控制已安装的PHP版本。

    步骤4:(可选)通过MultiPHP INI编辑器自定义PHP设置

    切换版本后,您可能需要调整PHP配置值:

    1. 返回cPanel中的软件部分。
    2. 点击MultiPHP INI编辑器
    3. 从下拉菜单中选择您的域。
    4. 修改以下值:
      memory_limit(例如256M)
      upload_max_filesize(例如64M)
      max_execution_time(例如300)
      post_max_size(例如64M)
      
      
      点击应用以保存更改。
      
      步骤5:验证更改
      创建一个测试文件以确认活跃的PHP版本(有关完整说明,请参见第7部分)。
      4. 方法2:通过.htaccess(Apache)更改PHP版本 {#htaccess-method}
      如果您的托管环境运行Apache但不提供图形PHP选择器,您可以直接通过您的.htaccess文件控制PHP版本。此方法特别适用于共享网络托管计划,其中服务器级访问受到限制。
      工作原理
      Apache使用处理程序来确定如何处理.php文件。通过在.htaccess中指定自定义处理程序,您指示Apache为您的网站使用特定的PHP版本。
      步骤1:访问您的.htaccess文件
      您可以通过以下方式编辑.htaccess:
      
      cPanel文件管理器: 导航到public_html,找到.htaccess,右键单击,然后选择编辑。
      FTP/SFTP客户端: 连接到您的服务器并导航到您的网络根目录(通常是public_html或www)。
      SSH命令行: nano /home/username/public_html/.htaccess

      > 注意: .htaccess是隐藏文件。在您的FTP客户端中,启用”显示隐藏文件”。在cPanel文件管理器中,在右上角设置中勾选”显示隐藏文件(点文件)”。

      步骤2:添加PHP处理程序指令

      根据您的服务器的PHP处理程序命名约定,将以下行之一添加到您的.htaccess文件:

      对于PHP 8.2:

      AddHandler application/x-httpd-php82 .php

      对于PHP 8.1:

      AddHandler application/x-httpd-php81 .php

      对于PHP 7.4(旧版):

      AddHandler application/x-httpd-php74 .php

      替代语法(在某些主机上使用):

      # Using suPHP or FastCGI
      Action php-cgi /cgi-bin/php82
      AddHandler php-cgi .php

      > 重要: 确切的处理程序名称(x-httpd-php82x-httpd-php81等)取决于您的托管提供商如何在其服务器上配置PHP。如果上述方法不起作用,请查看您的主机文档或联系支持以获取正确的处理程序名称。

      步骤3:保存并测试

      保存.htaccess文件并测试您的网站。如果您看到500内部服务器错误,处理程序名称可能不正确——删除该行并尝试替代语法。

      5. 方法3:通过命令行(VPS/专用服务器)更改PHP版本 {#cli-method}

      如果您管理自己的专用服务器或具有root访问权限的VPS,您可以完全控制PHP安装和版本切换。这是最强大和最灵活的方法。

      先决条件

      • 对您的服务器的root或sudo访问权限
      • SSH客户端(macOS/Linux上的终端,Windows上的PuTTY或Windows终端)
      • 对Linux命令行操作的基本熟悉

      Ubuntu / Debian——使用update-alternatives

      Ubuntu和基于Debian的系统使用update-alternatives系统来同时管理多个PHP版本。

      #### 步骤1:添加Ondřej Surý PHP存储库

      此PPA为Ubuntu/Debian提供多个PHP版本:

      sudo apt update
      sudo apt install -y software-properties-common
      sudo add-apt-repository ppa:ondrej/php
      sudo apt update

      #### 步骤2:安装所需的PHP版本

      # Install PHP 8.2 and common extensions
      sudo apt install -y php8.2 php8.2-cli php8.2-fpm php8.2-mysql php8.2-curl 
          php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip php8.2-bcmath
      
      # Install PHP 8.1 if needed
      sudo apt install -y php8.1 php8.1-cli php8.1-fpm php8.1-mysql

      #### 步骤3:切换默认PHP版本(CLI)

      # View all registered PHP alternatives
      sudo update-alternatives --list php
      
      # Switch to PHP 8.2
      sudo update-alternatives --set php /usr/bin/php8.2
      
      # Or use the interactive selector
      sudo update-alternatives --config php

      交互式选择器将显示如下内容:

      There are 3 choices for the alternative php (providing /usr/bin/php).
      
        Selection    Path             Priority   Status
      ------------------------------------------------------------
      * 0            /usr/bin/php8.2   82        auto mode
        1            /usr/bin/php7.4   74        manual mode
        2            /usr/bin/php8.1   81        manual mode
        3            /usr/bin/php8.2   82        manual mode
      
      Press <enter> to keep the current choice[*], or type selection number:

      输入与您所需版本对应的数字,然后按Enter。

      #### 步骤4:为Apache切换PHP版本(mod_php)

      # Disable current PHP module (e.g., PHP 8.1)
      sudo a2dismod php8.1
      
      # Enable new PHP module (e.g., PHP 8.2)
      sudo a2enmod php8.2
      
      # Restart Apache
      sudo systemctl restart apache2

      #### 步骤5:为Nginx切换PHP版本(PHP-FPM)

      对于Nginx,PHP通过PHP-FPM处理。更新您的Nginx服务器块以指向正确的FPM套接字:

      # In your Nginx server block configuration
      location ~ .php$ {
          fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
          fastcgi_index index.php;
          include fastcgi_params;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      }

      然后重新启动PHP-FPM和Nginx:

      sudo systemctl restart php8.2-fpm
      sudo systemctl restart nginx

      CentOS / RHEL / AlmaLinux / Rocky Linux——使用SCL或Remi存储库

      #### 选项A:使用软件集合(SCL)——CentOS 7

      # Install the SCL repository
      sudo yum install -y centos-release-scl
      
      # Install PHP 7.4 via SCL
      sudo yum install -y rh-php74 rh-php74-php-fpm rh-php74-php-mysqlnd
      
      # Enable PHP 7.4 for the current session
      sudo scl enable rh-php74 bash
      
      # Verify
      php --version

      > 注意: SCL更改是特定于会话的。要使其对用户永久有效,请将source /opt/rh/rh-php74/enable添加到~/.bashrc

      #### 选项B:使用Remi存储库——CentOS 7/8、AlmaLinux、Rocky Linux

      # Install EPEL and Remi repositories
      sudo dnf install -y epel-release
      sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm  # For RHEL 8/AlmaLinux 8
      
      # List available PHP streams
      sudo dnf module list php
      
      # Reset current PHP module
      sudo dnf module reset php
      
      # Enable PHP 8.2 stream
      sudo dnf module enable php:remi-8.2
      
      # Install PHP 8.2
      sudo dnf install -y php php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-zip
      
      # Verify
      php --version

      为单个网站切换PHP(按网站PHP版本)

      在运行多个网站的服务器上,您通常需要为每个网站使用不同的PHP版本。最简洁的方法是运行多个PHP-FPM池:

      # Start PHP-FPM for multiple versions
      sudo systemctl start php7.4-fpm
      sudo systemctl start php8.1-fpm
      sudo systemctl start php8.2-fpm

      然后配置每个Nginx虚拟主机以使用不同的FPM套接字:

      # Site A — PHP 8.2
      server {
          server_name site-a.com;
          root /var/www/site-a;
          location ~ .php$ {
              fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
          }
      }
      
      # Site B — PHP 7.4 (legacy application)
      server {
          server_name site-b.com;
          root /var/www/site-b;
          location ~ .php$ {
              fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
          }
      }

      6. 方法4:通过php.ini更改PHP版本 {#phpini-method}

      在某些托管环境中,特别是那些使用CGIFastCGI PHP处理程序的环境中,您可以通过放置在您网站根目录中的自定义php.ini文件来影响PHP行为——有时甚至可以影响版本。

      创建自定义php.ini

      1. 在您网站的根目录(php.ini)中创建一个名为public_html的文件。
      2. 添加您的配置指令:
      ; Custom PHP configuration
      memory_limit = 256M
      upload_max_filesize = 64M
      post_max_size = 64M
      max_execution_time = 300
      max_input_vars = 3000
      date.timezone = "UTC"

      > 注意: 此方法控制PHP*设置*,不一定是PHP*版本*本身。通过php.ini进行版本选择仅在特定托管设置上可能。要获得完整的版本控制,请使用上述cPanel、.htaccess或命令行方法。

      7. 如何验证您的活跃PHP版本 {#verify}

      进行任何更改后,始终验证正确的PHP版本是否处于活跃状态。有几种方法可以做到这一点:

      方法A:创建phpinfo()测试页面

      1. 在您的网络根目录(phpinfo.php)中创建一个名为public_html的新文件。
      2. 添加以下内容:
      <?php
      phpinfo();
      ?>
      1. 在您的浏览器中导航到https://yourdomain.com/phpinfo.php
      2. 该页面将显示全面的PHP配置信息。PHP版本显示在最顶部。

      > 安全警告: 测试后立即删除此文件。phpinfo()输出会暴露可能帮助攻击者的敏感服务器配置详细信息。

      方法B:通过命令行(SSH)检查

      php --version
      # or
      php -v

      预期输出:

      PHP 8.2.10 (cli) (built: Sep  5 2023 08:12:49) (NTS)
      Copyright (c) The PHP Group
      Zend Engine v4.2.10, Copyright (c) Zend Technologies
          with Zend OPcache v8.2.10, Copyright (c), by Zend Technologies

      方法C:通过简单的PHP脚本检查

      对于不太冗长的检查,使用此最小脚本而不是完整的phpinfo()

      <?php
      echo 'PHP Version: ' . PHP_VERSION;
      echo '<br>PHP Major Version: ' . PHP_MAJOR_VERSION;
      echo '<br>PHP Minor Version: ' . PHP_MINOR_VERSION;
      ?>

      方法D:通过WordPress管理员检查(对于WordPress网站)

      在您的WordPress仪表板中:

      1. 转到工具→网站健康
      2. 点击信息选项卡。
      3. 展开服务器部分。
      4. 查找PHP版本

      8. 切换PHP版本后的常见错误 {#common-errors}

      切换PHP版本有时会导致问题。以下是最常见的问题及其解决方法:

      错误1:白屏死机(WSOD)或空白页面

      原因: 插件、主题或自定义代码使用与新PHP版本不兼容的语法或函数。

      解决方案:

      • 通过添加到wp-config.php来启用WordPress调试模式:
        define('WP_DEBUG', true);
        define('WP_DEBUG_LOG', true);
        define('WP_DEBUG_DISPLAY', false);
      • 检查/wp-content/debug.log以获取特定的错误消息。
      • 停用所有插件并切换到默认主题以隔离问题。

      错误2:500内部服务器错误

      原因: 通常由.htaccess中的PHP处理程序不正确或新版本未安装的PHP扩展引起。

      解决方案:

      • 删除或更正AddHandler中的.htaccess指令。
      • 检查您的服务器错误日志:tail -f /var/log/apache2/error.logtail -f /var/log/nginx/error.log
      • 确保为新版本安装了所需的PHP扩展。

      错误3:”调用未定义的函数”或”找不到类”

      原因: 您的应用程序所需的PHP扩展(例如php-gdphp-mbstringphp-xml)未为新PHP版本安装。

      解决方案:

      # Ubuntu/Debian — install missing extensions for PHP 8.2
      sudo apt install php8.2-gd php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip
      
      # Restart web server
      sudo systemctl restart apache2  # or nginx

      错误4:已弃用的函数警告

      原因: 您的代码使用在较旧PHP版本中已弃用并在较新版本中删除的函数(例如mysql_*函数在PHP 7.0中删除)。

      解决方案:

      • 更新您的代码或插件以使用现代等效项(例如mysqli_*或PDO)。
      • 如果无法立即进行代码更改,请考虑暂时停留在兼容的PHP版本上,同时您计划升级。

      错误5:尽管按照步骤操作,PHP版本仍未更改

      原因: 可能有多个PHP配置生效(例如CLI与Web服务器),或缓存正在提供旧响应。

      解决方案:

      • 清除您的浏览器缓存和任何服务器端缓存(OPcache、Redis、Varnish)。
      • 重新启动您的Web服务器:sudo systemctl restart apache2sudo systemctl restart nginx
      • 确认您正在编辑正确的.htaccess或正确域的配置文件。

      9. PHP版本管理的最佳实践 {#best-practices}

      遵循这些指南以维护健康、安全和高性能的PHP环境:

      1. 始终先在暂存环境中测试

      永远不要直接在实时生产网站上切换PHP版本。设置一个暂存环境——可以是子域或单独的服务器——并在将更改应用于生产之前彻底测试您的应用程序。

      2. 保持PHP更新

      订阅PHP的官方安全公告,并在您当前的版本达到生命周期结束之前计划升级。运行EOL PHP版本是网站被攻击的最常见原因之一。

      3. 在升级前审计您的插件和依赖项

      在升级PHP之前,检查以下内容的兼容性:

      • 所有已安装的CMS插件和主题
      • Composer依赖项(composer.json
      • 自定义应用程序代码

      使用PHPCompatibility(PHP_CodeSniffer规则集)等工具扫描您的代码库以查找兼容性问题。

      4. 保持PHP扩展同步

      切换PHP版本时,始终为新版本重新安装所有必需的扩展。缺少扩展是升级后错误的最常见原因。

      5. 对配置文件使用版本控制

      将您的.htaccessphp.ini和服务器配置文件存储在Git存储库中。这样可以轻松地在出现问题时回滚更改

      15%

      全场主机优惠15%

      测试技能,享折扣

      使用代码:

      Skills
      开始使用