AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 448982
Accepted
Max
Max
Asked: 2012-11-16 03:27:35 +0800 CST2012-11-16 03:27:35 +0800 CST 2012-11-16 03:27:35 +0800 CST

如何将自定义参数从 Nginx 传递给 PHP?

  • 772

我正在Nginx 1.2.4结合使用PHP-FPM 5.4.8并fastcgi尝试将自定义参数传递给PHP. 以下是我目前找到的选项:

  • 使用env指令在中设置环境变量并使用或从中nginx获取它。问题是它只在上下文中运行,而我需要在上下文中设置参数。getenv()$_ENVPHPenvmainserver

  • 使用fastcgi_param专为此设计的指令。

我尝试使用以下方法更改某些参数的值fastcgi_param但未成功:

nginx:

fastcgi_param PATH_INFO "/var/tmp";

PHP:

我检查了我能找到的所有预定义数组:

echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header);
echo "\n".'$argc'."\n"; var_dump($argc);
echo "\n".'$argv'."\n"; var_dump($argv);
echo '</pre>';

唯一要显示PATH_INFO的是$_SERVER:

var_dump($_SERVER); // ["PATH_INFO"]=> string(0) ""

但是我设置的值nginx没有被考虑在内。

Q1:我是否需要在nginx/php级别配置任何东西才能使fastcgi_param指令生效?

Q2:该fastcgi_param指令是否仅限于预定义的参数列表(例如,我可以设置PATH_INFO但不能设置我自己的自定义变量,例如FOO)?

Q3:如果 Q2 是:有没有办法从 Nginx 向 PHP 传递自定义参数?

php
  • 2 2 个回答
  • 27107 Views

2 个回答

  • Voted
  1. Best Answer
    Krzysztof Księżyk
    2012-11-16T03:54:16+08:002012-11-16T03:54:16+08:00

    您可以通过 fastcgi_param 指令传递其他参数。我敢肯定,因为我使用了这个功能。

    我的模范 nginx 配置

    server {
        server_name localhost;
        include     conf/defaults.conf;
        root        /var/www;
    
        location    ~* "\.php$" {
            fastcgi_param CRS "crs";
            include conf/fastcgi-php.conf;
        }                                           
    }
    

    以及部分 phpinfo() 输出:

    ...
    _SERVER["USER"] fcgi
    _SERVER["HOME"] /dev/null
    _SERVER["FCGI_ROLE"]    RESPONDER
    _SERVER["REMOTE_USER"]  no value
    _SERVER["CRS"]  crs
    _SERVER["QUERY_STRING"] no value
    
    • 15
  2. Mahmoud Zalt
    2018-05-23T18:44:00+08:002018-05-23T18:44:00+08:00

    您可以通过在请求标头中传递自定义变量来修改请求,例如:

    proxy_set_header Variable-name-here Value-here;
    

    然后您可以从 PHP 脚本中的请求标头中读取这些值。

    • 0

相关问题

  • 用户特定的 Php.ini 当 php 作为模块运行时?

  • 使 php mail() 函数在 ubuntu-server 上工作的步骤是什么?

  • Web 服务器和数据库服务器位于完全不同的位置

  • PHP 作为 CGI 还是 Apache 模块?

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve