
当 php 脚本提示 json 或 mbstring 等扩展缺失,即使已在控制面板中启用,这通常是配置未加载或服务未重启所致。本教程将指导您通过 phpinfo() 验证扩展状态,并确保正确启用后,重启相关服务以彻底解决此问题。
在 PHP 应用部署过程中,开发者经常会遇到“请求的 PHP 扩展缺失”的错误提示,例如 ERROR: The requested PHP extension json is missing from your system. 或 ERROR: The requested PHP extension mbstring is missing from your system.。尽管用户可能已经在主机控制面板(如 CPanel)中明确启用了这些扩展,但错误依然存在。这通常不是因为扩展未安装,而是因为 PHP 运行环境未能正确加载这些已启用的配置,或者相关的服务在配置更改后未重启。本教程将详细介绍如何诊断和解决这类问题。
PHP 扩展的启用通常涉及修改 php.ini 配置文件。当您在 CPanel 或其他控制面板中启用扩展时,实际上是系统在后台修改了相应的 php.ini 文件。然而,PHP 解释器(无论是作为 Apache/Nginx 模块运行,还是通过 PHP-FPM 独立运行)并不会立即感知到这些配置更改。它需要重新加载配置,这通常通过重启相关的服务来实现。如果服务未重启,PHP 将继续使用旧的配置,从而报告扩展缺失。
解决此类问题的第一步是精确诊断 PHP 当前运行环境的实际状态。phpinfo() 函数是 PHP 提供的一个强大工具,可以显示 PHP 的所有配置信息、已加载的扩展、服务器环境等。
创建 phpinfo.php 文件: 在您的网站根目录或任何可以通过浏览器访问的目录下,创建一个名为 phpinfo.php 的文件,并添加以下内容:
<?php phpinfo(); ?>
通过浏览器访问: 在您的浏览器中访问 http://您的域名/phpinfo.php。
检查扩展信息: 在 phpinfo() 的输出页面中,仔细查找 json 和 mbstring 扩展的相关信息。
通过 phpinfo() 的输出,您可以明确判断是扩展确实未加载,还是仅仅是您的应用程序未能正确检测到。如果 phpinfo() 显示扩展已加载,但应用程序仍报错,则可能需要检查应用程序自身的配置或缓存。如果 phpinfo() 也显示扩展缺失,那么问题在于 PHP 运行环境本身。
立即学习“PHP免费学习笔记(深入)”;
如果 phpinfo() 确认扩展缺失,您需要重新检查其启用状态。
CPanel PHP Selector: 如果您使用的是 CPanel,请再次访问 CPanel 的 "Select PHP Version" 或 "PHP Selector" 工具。确保 json 和 mbstring 扩展旁边的复选框已选中。有时,即使选中,也可能需要重新保存或应用更改。
手动编辑 php.ini: 在某些情况下,您可能需要直接编辑 php.ini 文件。根据 phpinfo() 中显示的 Loaded Configuration File 路径,找到正确的 php.ini 文件。打开该文件,并确保以下行存在且未被注释(即行首没有 ; 符号):
extension=json.so extension=mbstring.so
请注意,.so 是 Linux 系统上的扩展名,Windows 系统上通常是 .dll。如果您不确定扩展文件的具体名称或路径,可以查看 php.ini 中 extension_dir 的设置,并检查该目录下是否存在 json.so 和 mbstring.so 文件。
这是解决此类问题的关键一步,也是最常被忽略的环节。无论您是通过控制面板还是手动编辑 php.ini 启用了扩展,PHP 运行环境都需要重新加载其配置才能生效。
您需要重启的服务取决于您的服务器配置:
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
PHP-FPM 服务: 如果您的 PHP 是通过 PHP-FPM 运行的(例如与 Nginx 或 Apache 结合使用),则需要重启 PHP-FPM 服务。
CPanel 用户: CPanel 通常提供一个界面来管理 PHP-FPM 服务,您可以在其中找到重启选项。
SSH 用户(Linux): 通过 SSH 连接到您的服务器,并执行以下命令(具体命令可能因 Linux 发行版和 PHP 版本而异):
sudo systemctl restart php-fpm # 或者针对特定版本 sudo systemctl restart php7.4-fpm sudo systemctl restart php8.0-fpm # 对于使用 init.d 的系统 sudo /etc/init.d/php-fpm restart
Web 服务器服务(Apache/Nginx): 如果 PHP 是作为 Apache 模块(mod_php)运行的,或者即使使用 PHP-FPM,重启 Web 服务器有时也能确保所有相关进程都重新加载配置。
CPanel 用户: CPanel 通常提供重启 Apache 或 Nginx 的选项。
SSH 用户(Linux):
# 对于 Apache sudo systemctl restart httpd # 或者 sudo systemctl restart apache2 # 对于 Nginx sudo systemctl restart nginx
重要提示: 在重启服务之前,请确保保存所有未完成的工作,因为重启会导致短暂的服务中断。
在重启相关服务后,再次通过浏览器访问您之前创建的 phpinfo.php 文件。确认 json 和 mbstring 扩展现在是否已显示为已启用。如果 phpinfo() 显示正常,那么您的应用程序应该也能正确识别这些扩展并正常运行。
通过遵循上述步骤,您应该能够有效诊断并解决 PHP 扩展缺失的问题。核心在于:使用 phpinfo() 准确了解当前 PHP 运行环境,确保 php.ini 配置正确,并在更改后及时重启相关服务。
以上就是解决 PHP 扩展缺失错误:以 json 和 mbstring 为例的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号