CentOS PHP环境搭建步骤
一 准备与版本选择
- 更新系统并安装常用仓库:执行命令:sudo yum update -y、sudo yum install -y epel-release。
- 选择堆栈:常见为 LAMP(Apache+MySQL+PHP) 或 LEMP(Nginx+MySQL+PHP)。
- 选择 PHP 版本:
- CentOS 7 常见为 PHP 7.x;如需 PHP 7.4/8.0,可启用第三方仓库(如 webtatic)后再安装。
- CentOS 8 默认 PHP 7.2,也可通过相应仓库安装 7.4/8.0。
- 常用扩展建议:php-cli php-fpm php-mysqlnd php-gd php-mbstring php-xml php-bcmath php-zip。
二 快速搭建 LAMP(Apache + MariaDB/MySQL + PHP)
- 安装组件:
- Web 服务器:sudo yum install -y httpd
- 数据库:优先 MariaDB(CentOS 7 常见为 mariadb-server):sudo yum install -y mariadb-server;如需 MySQL,按发行版仓库安装
- PHP 与扩展:sudo yum install -y php php-mysqlnd php-gd php-mbstring php-xml php-bcmath
- 启动与开机自启:
- sudo systemctl start httpd && sudo systemctl enable httpd
- sudo systemctl start mariadb && sudo systemctl enable mariadb
- 运行安全初始化:sudo mysql_secure_installation
- 验证与测试:
- 查看版本:php -v
- 创建测试页:echo “” | sudo tee /var/www/html/info.php
- 浏览器访问:http://服务器IP/info.php 应显示 PHP 信息页
三 快速搭建 LEMP(Nginx + MariaDB/MySQL + PHP-FPM)
- 安装组件:
- Web 服务器:sudo yum install -y nginx
- 数据库:同 LAMP(mariadb-server 或 MySQL)
- PHP 与 FPM:sudo yum install -y php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-bcmath
- 启动与开机自启:
- sudo systemctl start nginx && sudo systemctl enable nginx
- sudo systemctl start php-fpm && sudo systemctl enable php-fpm
- 配置 Nginx 处理 PHP:编辑站点配置(如 /etc/nginx/conf.d/default.conf)
- 重启服务并测试:
- sudo systemctl restart nginx
- 访问 http://服务器IP/info.php 验证
四 常用配置与优化
- 核心参数(编辑 /etc/php.ini):
- memory_limit(脚本内存上限)、upload_max_filesize、post_max_size(上传相关)
- date.timezone(如:Asia/Shanghai)
- FPM 与权限:
- 确认 php-fpm 运行用户与站点目录属主一致(如 nginx/www),避免 403/500 错误
- 性能与安全:
- 启用 OPcache(生产环境建议开启)
- 仅保留必要扩展,隐藏 phpinfo 页面,限制访问 /var/www 目录
- 重载配置:
- sudo systemctl restart php-fpm(FPM 变更)
- sudo systemctl restart httpd 或 sudo systemctl restart nginx(Web 服务变更)
五 常见问题与排错
- 安装 PHP 扩展提示无匹配包:在 CentOS 7 上优先安装 php-mysqlnd 而非已弃用的 php-mysql。
- 访问 http://IP/ 显示默认页而非项目:确认 DocumentRoot 与 index 指令配置正确,且站点目录存在默认首页。
- 访问 info.php 空白或下载:多为 Nginx/Apache 未正确代理到 PHP-FPM,检查 fastcgi_pass 路径或端口、以及 SCRIPT_FILENAME 是否设置。
- 数据库启动失败或提示 Unit not found:在 CentOS 7 使用 mariadb-server 替代 mysql-server 更常见。
- SELinux 或防火墙拦截:必要时调整策略或临时放行 80/443 端口后再测试。