电话
400 9058 355
应先确认系统类型再配置PHP环境:CentOS/RHEL需添加Remi源启用PHP 8.2,Ubuntu/Debian需启用universe源;LNMP必须用php-fpm而非mod_php;Nginx需正确配置fastcgi_pass并验证php-fpm运行状态;注意MySQL用户权限、扩展加载及SELinux等权限问题。
不同发行版的包管理器和默认仓库内容差异很大,直接 yum install php 或 apt install php 可能装到过时版本(如 PHP 7.4),甚至缺关键模块(如 php-fpm、php-mysqlnd)。务必先查清系统类型:
cat /etc/os-release。CentOS/RHEL 8+ 默认用
dnf,且官方源已移除 PHP;Ubuntu 22.04 默认带 PHP 8.1,但扩展需单独安装。
universe 源(/etc/apt/sources.list 中含 deb http://archive.ubuntu.com/ubuntu jammy universe)dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm),再启用 PHP 8.2 模块:dnf module enable php:remi-8.2
LNMP 中 PHP 必须以 php-fpm 方式运行,Nginx 本身不解析 PHP 文件。装错成 Apache 的 libapache2-mod-php 或 Nginx 的 php-cgi(已废弃)会导致 502 Bad Gateway 或 404。
apt install nginx php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip
/etc/php/8.1/fpm/pool.d/www.conf(监听套接字或端口)、/etc/nginx/sites-enabled/default(Nginx 需 proxy_pass 到 unix:/run/php/php8.1-fpm.sock 或 127.0.0.1:9000)php-fpm 是否启用并运行:systemctl is-enabled php8.1-fpm 和 systemctl status php8.1-fpm,否则 Nginx 请求会超时常见错误是 Nginx 配置里漏了 fastcgi_pass,或 fastcgi_param SCRIPT_FILENAME 指向错误路径,导致返回空白页或直接下载 .php 文件。
/var/www/html/info.php 写:location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}info.php,说明 Nginx 根本没把请求交给 PHP-FPM —— 检查 location 是否被
更宽泛的规则(如 location /)覆盖,或 fastcgi_pass 地址与 php-fpm 实际监听地址不一致PHP 脚本能跑 phpinfo() 不代表能连数据库。两个高频断点:MySQL 用户未授权远程(或 localhost)访问,以及 mysqli 或 pdo_mysql 扩展未启用。
php -m | grep -E 'mysqli|pdo_mysql';若无输出,编辑 /etc/php/8.1/fpm/php.ini,取消注释 extension=mysqli 和 extension=pdo_mysql,然后重启 php8.1-fpm
'user'@'%' 就完事 —— 若 PHP-FPM 与 MySQL 同机,Nginx 传来的连接常是 localhost,需显式建 'user'@'localhost' 并 GRANT 权限mysqli_connect() 报错 Connection refused:优先查 mysql.service 是否运行,再查 bind-address 是否设为 127.0.0.1(而非 0.0.0.0 或注释掉)root 目录权限、PHP-FPM 的 user/group(默认 www-data 或 nginx)、SELinux 策略(RHEL 系默认开启)——这三个地方出问题,比 PHP 语法错误更难定位。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...