PHP部署后空白或500错误,首要验证phpinfo()是否正常显示;若失败则Web服务器未解析PHP,需检查模块加载与处理器配置;成功则定位代码级错误,通过开启display_errors或查错误日志获取具体报错。

PHP框架部署后页面空白或报错,浏览器只显示“500 Internal Server Error”或“403 Forbidden”,说明Web服务器已接收请求但拒绝执行或中途崩溃,必须立刻定位底层原因而非刷新重试。
确认PHP是否真正运行
第一步:在项目根目录新建一个 info.php 文件,内容仅一行:<?php phpinfo(); ?>。
第二步:用浏览器访问 http://你的域名/info.php。如果看到PHP版本、配置表格,说明PHP解析器工作正常;如果下载文件、显示源码或直接404,证明Web服务器根本没把.php交给PHP处理——此时所有500/403都是假象,真实问题是模块未启用或路由未绑定。
第三步:Apache用户检查 httpd.conf 是否含 LoadModule php_module modules/libphp.so 和 AddHandler application/x-httpd-php .php;Nginx用户确认 location ~ \.php$ 块中 fastcgi_pass 指向的PHP-FPM socket或端口正在监听(systemctl status php-fpm)。
立即学习“PHP免费学习笔记(深入)”;
快速捕获500的真实错误
方法一:临时开启错误显示(仅限开发环境)
在出错页面对应的PHP入口文件(如Laravel的public/index.php、ThinkPHP的index.php)最顶部插入三行代码,前面不能有任何空格或BOM字符:
<?php error_reporting(E_ALL); ini_set('display_errors', '1'); ini_set('log_errors', '0');
刷新页面,错误信息将直接输出在浏览器上,常见内容如 Fatal error: Uncaught Error: Call to undefined function curl_init() 或 Parse error: syntax error, unexpected '}' —— 这就是根源。
方法二:直查服务器错误日志(生产环境唯一可靠方式)
宝塔面板:网站 → 日志 → 错误日志;XAMPP:打开 apache/logs/error.log;LNMP:查看 /home/wwwlogs/你的域名.error.log 或 /var/log/php-fpm/www-error.log。找到时间戳匹配的最新条目,里面会明确写出文件路径、行号和错误类型。
修复403 Forbidden的核心权限操作
Linux服务器上,403几乎全是权限或SELinux拦截导致。
第一步:确认Web服务进程用户身份。执行 ps aux | grep -E '(apache|nginx|www)' | head -1,看输出中第二列用户名(常见为 www-data、nginx 或 apache)。
第二步:递归修改项目目录归属。假设项目路径是 /var/www/myapp,执行:chown -R www-data:www-data /var/www/myapp(请将 www-data 替换为你上一步查到的实际用户名)。
第三步:设置最小必要权限。目录设为755(find /var/www/myapp -type d -exec chmod 755 {} \;),PHP文件设为644(find /var/www/myapp -type f -name "*.php" -exec chmod 644 {} \;)。【严禁对整个项目执行chmod 777】,这会触发安全模块主动拦截并返回403。
第四步:若仍403,检查SELinux状态:sestatus。若为enabled,临时关闭测试:setenforce 0。若页面恢复正常,说明SELinux策略阻止了访问,需用 chcon -R -t httpd_sys_content_t /var/www/myapp 重新标记上下文。
框架特有的重写与入口路径问题
Laravel、Symfony等现代框架要求所有请求都经由 public/index.php 统一入口,否则除首页外全部404或500。
Apache用户:确保项目根目录存在 .htaccess 文件,且内容包含标准重写规则;同时确认Apache已启用 mod_rewrite 模块(a2enmod rewrite)。
Nginx用户:检查站点配置中 root 指令是否指向框架的 public 子目录(例如 root /var/www/myapp/public;),并在 location / 块内添加:try_files $uri $uri/ /index.php?$query_string;。
ThinkPHP用户:若使用Apache,需确认 AllowOverride All 已写入对应 <Directory> 区块;若用Nginx,必须在 location ~ \.php$ 中加入 fastcgi_split_path_info ^(.+\.php)(/.+)$; 并正确传递 PATH_INFO,否则路由解析失败直接500。



















