【问题标题】:Set $_SERVER variable when calling PHP from command line?从命令行调用 PHP 时设置 $_SERVER 变量?
【发布时间】:2012-05-30 15:57:21
【问题描述】:

是否可以通过命令行将 $_SERVER 变量传递给 PHP 脚本?

具体来说,我正在尝试手动设置 $_SERVER['recipient'],这样我就可以在不设置邮件服务器的情况下测试电子邮件管道。

【问题讨论】:

  • 不是一个很清楚的问题,但也许你想要:php script.php command_line_arguments_go_here

标签: php email command-line-interface piping


【解决方案1】:

在 *nix 上:

$ recipient="email@domain.com" php script.php

<?php

print_r($_SERVER);

测试:

$ recipient="email@domain.com" php script.php | grep recipient

[recipient] => something@domain.com

或者,您可以导出它或 setenv(取决于您的操作系统),例如

$ export recipient="email@domain.com"
$ setenv recipient="email@domain.com"

【讨论】:

  • 请注意,这对于设置内置变量(例如 $_SERVER['HOST_NAME'])也很有用。像魅力一样工作!
  • 这对 DOCUMENT_ROOT 不起作用有什么原因吗?有办法解决吗?
  • 这里有 Windows 替代品吗?
  • 这似乎不适用于 PHP 5.6?哦——如果你运行 php script.php 就可以了,但是如果你运行 php -S 就不行了。
  • @JohnWiseman 我和你一样感到失望! :( 见bugs.php.net/bug.php?id=67808
【解决方案2】:

@sberry 的回答是正确的。

...但是因为我来到这个页面寻找为$_SERVER 数组设置默认值,当从命令行运行 PHP 时,这是我自己的答案。希望它可以帮助某人。

empty( $_SERVER['HTTP_HOST'] ) && $_SERVER['HTTP_HOST'] = 'localhost';
empty( $_SERVER['REQUEST_URI'] ) && $_SERVER['REQUEST_URI'] = '/';
empty( $_SERVER['DOCUMENT_ROOT'] ) && $_SERVER['DOCUMENT_ROOT'] = __DIR__;
print_r( $_SERVER );

【讨论】:

    【解决方案3】:

    我个人使用以下。

    示例:在我的 PHP 命令行中设置 $_SERVER['recipient]

    使用 OS X

    • 按照https://github.com/ersiner/osx-env-sync 中的说明进行操作
    • 将以下行添加到文件“~/.bash_profile”(如果不存在,则创建它)

      export recipient="something@example.com"

    使用 Ubuntu GNU/Linux

    【讨论】:

      【解决方案4】:

      您还可以传递两个或更多变量。例如:

      $ SERVER_NAME="example.com" REQUEST_URI="?foo=bar" php script.php
      
      <?php
      
      print_r($_SERVER);
      

      【讨论】:

        【解决方案5】:

        如何使用以下内容设置一个名为 dummy.php 的虚拟页面:

        <?php
            $_SERVER['recipient'] = 'me@gmail.com';
        ?>
        

        【讨论】:

          猜你喜欢
          • 2014-08-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-23
          • 1970-01-01
          • 2013-08-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多