Nginx - FastCGI 在 stderr 中发送:“PHP 消息:PHP 注意:未定义的变量

Ngnix - FastCGI sent in stderr: "PHP message: PHP Notice: Undefined variable

我已经安装了 Ngnix 服务器并将其配置为:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
            # Uncomment to enable naxsi on this location
            # include /etc/nginx/naxsi.rules
    }

    # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
    #location /RequestDenied {
    #       proxy_pass http://127.0.0.1:8080;    
    #}
    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = / {
      # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
    #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
    #
    #       # With php5-cgi alone:
    #       fastcgi_pass 127.0.0.1:9000;
    #       # With php5-fpm:
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #       deny all;
    #}

}

我收到这些错误(从我的 error.log 复制):

    *9 FastCGI sent in stderr: "PHP message: PHP Notice:  Undefined variable: confMsg in /usr/share/nginx/html/admin-interface/login.php on line 196" while reading upstream, client: 127.0.0.1, server: localhost, request: "GET /admin-interface/login.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "localhost"

2015/12/16 00:27:37 [error] 952#0: *9 FastCGI sent in stderr: "PHP message: PHP Notice: Undefined index: username in /usr/share/nginx/html/admin-interface/login.php on line 245 PHP message: PHP Notice: Undefined index: username in /usr/share/nginx/html/admin-interface/login.php on line 249" while reading upstream, client: 127.0.0.1, server: localhost, request: "GET /admin-interface/login.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "localhost"

我正在尝试使用 Ngnix 服务器配置此环境,此环境确实可以使用不同的主机。 我确实在 php.ini

中更改了 cgi.fix_pathinfo = 0

我的配置缺少什么?

很抱歉这个问题太模糊了,很难回答... 有什么问题吗??

从错误文件来看,这里没有问题。只是 PHP 通知。

看看这个:

error_page 500 502 503 504 /50x.html;
location = /50x.html {

你看不出有什么不对吗?您将 / 位置包含在错误位置中,这不是我朋友的逻辑......您在“/”下的 php 文件将永远不会以这种方式传递给 php5-fpm。除非我对你的要求一无所知,否则请这样做;

删除;

location = /50x.html {

及以下。

改为添加:

location ~ [^/]\.php(/|$) { #open location bracket

    fastcgi_split_path_info ^(.+?\.php)(/.*)$;
    if (!-f $document_root$fastcgi_script_name) { #open condition bracket
        return 404;
    } #close condition bracket

    include fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php5-fpm.sock;

} #close location bracket

然后;

sudo nginx -t # to test your config.

如果有问题,请查找左括号和右括号,因为这似乎是您的克星(您位于为其打开括号的服务器块中 - 确保将其关闭)。如果全部通过;

sudo nginx -s reload

请您下次 post 编码时,花点时间删除所有垃圾评论。这将帮助您获得答案或至少对您的问题感兴趣。

如果一切顺利,您可以考虑为更多 robust/efficient 服务器添加这些位置配置;

# send expire headers
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
    access_log off; # optional
    log_not_found off; # optional
    expires max;
}

location = ^/favicon.ico {
    access_log off;
    log_not_found off;
}

# robots noise...
location = ^/robots.txt {
    log_not_found off;
    access_log off;
    allow all;
}

# block access to hidneen files (.htaccess per example)
location ~ /\. { access_log off; log_not_found off; deny all; }

如果您不了解设置,请不要添加。这就像在不知道它是什么类型的情况下盲目地给你的车加油一样。

这不是错误,而是通知

脚本 /usr/share/nginx/html/admin-interface/login.php 正在访问当时不存在的变量 $confMsg

您可以更改 php.ini 中的错误报告级别(这也会影响其他脚本,您不想关闭通知..)或修复脚本中错误的变量访问。

第二种解决方案会更简单,因为您只需初始化 $confMsg = '';