CentOS 7系统如何安装ThinkPHP所需扩展及配置yum源?
- 内容介绍
- 文章标签
- 相关推荐
本文共计682个文字,预计阅读时间需要3分钟。
ThinkPHP项目在CentOS 7上运行不正常,常见原因可能是PHP缺少以下扩展:
yum安装扩展比手动编译更稳妥
CentOS 7默认PHP版本多为 5.4/5.6(EPEL源)或 7.2+(Remi源),手动编译扩展容易因头文件路径、PHP配置参数不一致导致 undefined symbol 错误。优先走 yum 安装:
- 先确认PHP版本:
php -v;再查PHP安装方式:rpm -qa | grep php - 若用系统自带PHP(如 php-5.4.16):启用 EPEL 源后执行
yum install php-mbstring php-curl php-gd php-opcache php-pdo php-mysqlnd - 若用 Remi 源的 PHP 7.4+:需先启用对应仓库,例如
yum install php74-php-mbstring php74-php-curl php74-php-gd—— 注意包名带版本前缀,且php74-php-fpm和php74-php必须同源 - 装完别忘了重启服务:
systemctl restart php-fpm或systemctl restart httpd
手动编译扩展只在特定场景下必要
只有两种情况才需要手动编译:用了非RPM安装的PHP(如源码编译安装),或 要启用某些未打包进yum的扩展(如 swoole、redis)。操作要点:
- 确保已安装
php-devel(对应PHP版本),否则phpize会报错找不到php.h - 进入扩展源码目录(如
redis-5.3.7),执行:phpize && ./configure --with-php-config=/usr/bin/php-config && make && make install - 检查
php-config路径是否匹配当前PHP(which php和php-config --prefix应一致),否则扩展.so会加载失败 - 在
php.ini中添加extension=redis.so,注意不是绝对路径(除非指定extension=/path/to/redis.so)
常见陷阱:PHP-FPM与CLI用的不是同一份配置
很多同学改了 /etc/php.ini,但 php -m 显示扩展已加载,Web却仍报错——这是因为 PHP-FPM 默认读取的是 /etc/php-fpm.d/www.conf 中指定的 php_admin_value[extension] 或独立的 php.ini(如 /etc/opt/remi/php74/php.ini)。务必确认:
立即学习“PHP免费学习笔记(深入)”;
-
php --ini查 CLI 加载的配置路径 -
php-fpm -t && php-fpm -i | grep "Loaded Configuration File"查 FPM 实际加载的 ini - 两个环境的
extension_dir值可能不同,.so文件放错位置会导致“扩展存在但无法启用”
最省事的办法:所有扩展统一用 yum 安装,并确保 PHP 主程序和扩展来自同一仓库(比如全用 Remi 的 php74-* 系列)。混用系统PHP和第三方扩展是多数问题的根源。
本文共计682个文字,预计阅读时间需要3分钟。
ThinkPHP项目在CentOS 7上运行不正常,常见原因可能是PHP缺少以下扩展:
yum安装扩展比手动编译更稳妥
CentOS 7默认PHP版本多为 5.4/5.6(EPEL源)或 7.2+(Remi源),手动编译扩展容易因头文件路径、PHP配置参数不一致导致 undefined symbol 错误。优先走 yum 安装:
- 先确认PHP版本:
php -v;再查PHP安装方式:rpm -qa | grep php - 若用系统自带PHP(如 php-5.4.16):启用 EPEL 源后执行
yum install php-mbstring php-curl php-gd php-opcache php-pdo php-mysqlnd - 若用 Remi 源的 PHP 7.4+:需先启用对应仓库,例如
yum install php74-php-mbstring php74-php-curl php74-php-gd—— 注意包名带版本前缀,且php74-php-fpm和php74-php必须同源 - 装完别忘了重启服务:
systemctl restart php-fpm或systemctl restart httpd
手动编译扩展只在特定场景下必要
只有两种情况才需要手动编译:用了非RPM安装的PHP(如源码编译安装),或 要启用某些未打包进yum的扩展(如 swoole、redis)。操作要点:
- 确保已安装
php-devel(对应PHP版本),否则phpize会报错找不到php.h - 进入扩展源码目录(如
redis-5.3.7),执行:phpize && ./configure --with-php-config=/usr/bin/php-config && make && make install - 检查
php-config路径是否匹配当前PHP(which php和php-config --prefix应一致),否则扩展.so会加载失败 - 在
php.ini中添加extension=redis.so,注意不是绝对路径(除非指定extension=/path/to/redis.so)
常见陷阱:PHP-FPM与CLI用的不是同一份配置
很多同学改了 /etc/php.ini,但 php -m 显示扩展已加载,Web却仍报错——这是因为 PHP-FPM 默认读取的是 /etc/php-fpm.d/www.conf 中指定的 php_admin_value[extension] 或独立的 php.ini(如 /etc/opt/remi/php74/php.ini)。务必确认:
立即学习“PHP免费学习笔记(深入)”;
-
php --ini查 CLI 加载的配置路径 -
php-fpm -t && php-fpm -i | grep "Loaded Configuration File"查 FPM 实际加载的 ini - 两个环境的
extension_dir值可能不同,.so文件放错位置会导致“扩展存在但无法启用”
最省事的办法:所有扩展统一用 yum 安装,并确保 PHP 主程序和扩展来自同一仓库(比如全用 Remi 的 php74-* 系列)。混用系统PHP和第三方扩展是多数问题的根源。

