php源码跑不起来主因是环境四环节衔接断裂:1. web服务器与php未正确配对(apache需loadmodule,nginx需fastcgi_pass);2. 数据库连接配置(db_host等)与实际服务地址不匹配;3. 必要php扩展(mysqli、pdo_mysql、mbstring)未在web用php.ini中启用;4. 文件权限或文档根目录路径设置错误导致403/404。

PHP源码跑不起来,90%的问题出在环境搭建的四个环节里——不是某个组件没装,而是某一步的衔接断了。下面按真实部署顺序,把每个环节拆到能动手操作的程度。
Web服务器与PHP解析器必须配对启动
Apache和Nginx对PHP的支持方式完全不同,不能混用配置。Apache靠LoadModule加载php_module,Nginx则必须通过fastcgi_pass把请求转给PHP-FPM进程。如果你用XAMPP或WAMP,它默认走Apache+mod_php;但用Docker或手动装Nginx,就必须额外起一个php:fpm容器或服务。
- Apache用户检查
httpd.conf里是否有LoadModule php_module和AddHandler application/x-httpd-php .php - Nginx用户确认
location ~ \.php$块里写了fastcgi_pass 127.0.0.1:9000(或unix socket路径) - PHP-FPM必须运行且监听地址与Nginx配置一致,用
sudo systemctl status php-fpm或ps aux | grep fpm验证
数据库连接配置必须与phpMyAdmin创建的库完全一致
很多PHP项目报Connection refused或Access denied,不是密码错了,而是host填成了localhost却没意识到:Docker里localhost指向容器自身,而MySQL在另一个容器里——得填mysql(服务名)或宿主机IP(如172.17.0.1)。
- 检查项目配置文件(常见路径:
config/database.php、application/config/database.php、.env)中的DB_HOST、DB_NAME、DB_USER、DB_PASSWORD - 在phpMyAdmin里新建数据库时,排序规则必须选
utf8mb4_unicode_ci(不是utf8_general_ci),否则中文存入会乱码或截断 - 导入SQL前先确认MySQL版本兼容性:PHP 7.4+项目通常依赖
utf8mb4,MySQL 5.5以下不支持
PHP扩展缺失比版本不匹配更常导致白屏
页面空白但HTTP状态码是200,大概率是mysqli、pdo_mysql、curl或mbstring没启用。PHP CLI能跑php -v不代表Web模块也加载了——Apache和CLI用的是两套php.ini。
- 在浏览器访问
http://localhost/phpinfo.php(内容为<?php phpinfo(); ?>),搜索“Loaded Configuration File”,确认看到的是Web服务器用的ini路径 - 打开该
php.ini,取消注释这些行:extension=mysqli、extension=pdo_mysql、extension=mbstring - Windows下注意
extension_dir是否指向正确的ext目录,比如C:\php\ext;Linux下通常是/usr/lib/php/20221212/这类带年份的子目录
文件权限和文档根目录路径必须同时满足
“403 Forbidden”错误八成是权限问题;“404 Not Found”往往是因为项目没放在Web服务器认定的根目录下,或者URL路径和物理路径没对齐。
- Apache默认根目录:
/var/www/html/(Linux)、C:\xampp\htdocs\(Windows);Nginx默认是/usr/share/nginx/html/,但常被改写在server { root /path/to/project; }里 - Linux下确保Web服务器用户(如
www-data或apache)有读取权限:chmod -R 755 /var/www/html/myapp,chown -R www-data:www-data /var/www/html/myapp - 如果项目入口是
public/index.php(Laravel等框架),Nginx的root必须设为/var/www/myapp/public,而不是/var/www/myapp
真正卡住人的地方,往往不是单个组件装没装好,而是Apache以为PHP已加载、PHP以为MySQL在localhost、MySQL以为用户权限已开、而你访问的URL却指向了一个空目录——四个环节环环相扣,漏查任意一环,都会让整个流程静默失败。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











