Nginx与PHP配置异常:$_SERVER['PHP_SELF']为空求助
解决Nginx+PHP环境下$_SERVER['PHP_SELF']为空的问题
从你提供的环境信息和$_SERVER输出来看,问题出在Nginx与PHP-FPM的参数传递配置上——PHP_SELF是PHP基于CGI环境变量SCRIPT_NAME和PATH_INFO生成的,当这两个变量没有被正确传递给PHP时,就会出现PHP_SELF为空的情况。下面是具体的排查和修复步骤:
1. 检查站点Nginx配置(关键!)
你只提供了全局nginx.conf,但问题大概率出在站点级配置文件(/etc/nginx/sites-enabled/下的对应域名配置)的PHP处理块中。确保你的PHP location配置包含正确的FastCGI参数传递:
server { listen 443 ssl; server_name cumta.morhaviv.com www.cumta.morhaviv.com; root /var/www/morhaviv.com/public_html/cumta; index index.php index.html; # SSL配置(根据你的实际证书路径调整) ssl_certificate /path/to/your/ssl/cert.pem; ssl_certificate_key /path/to/your/ssl/key.pem; location / { try_files $uri $uri/ =404; } # 处理PHP请求的核心配置 location ~ \.php$ { # 引入Ubuntu默认的FastCGI PHP配置片段(包含基础参数) include snippets/fastcgi-php.conf; # 连接PHP-FPM(根据你的FPM套接字路径调整,Ubuntu 18.04默认是这个) fastcgi_pass unix:/run/php/php7.2-fpm.sock; # 引入全局FastCGI参数 include fastcgi_params; # 强制指定脚本文件名,确保PHP能正确识别当前执行的脚本 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
重点注意:SCRIPT_FILENAME的设置必须准确,它是PHP识别脚本路径的核心变量,错误的路径会导致PHP_SELF无法生成。
2. 检查PHP-FPM的cgi.fix_pathinfo配置
编辑PHP-FPM的配置文件/etc/php/7.2/fpm/php.ini,找到以下配置项并确保它的值为1:
cgi.fix_pathinfo=1
这个参数控制PHP是否修正CGI模式下的路径信息,设为1才能让PHP正确解析SCRIPT_NAME和PATH_INFO来生成PHP_SELF。
3. 重启服务生效
修改配置后,需要重启PHP-FPM和Nginx服务:
# 重启PHP-FPM sudo systemctl restart php7.2-fpm # 重启Nginx sudo systemctl restart nginx
验证修复
再次访问你的test.php,执行print_r($_SERVER),此时PHP_SELF应该会显示为/css/test.php,和SCRIPT_NAME的值一致(因为你的PATH_INFO为空)。
如果问题仍然存在,可以补充提供你的站点Nginx配置文件内容,我会进一步帮你排查。
内容的提问来源于stack exchange,提问作者morha13
相关产品推荐
相关产品推荐

