【问题标题】:PHP - Server name from the command linePHP - 命令行中的服务器名称
【发布时间】:2019-02-03 23:09:37
【问题描述】:

显然$_SERVER['SERVER_NAME']仅在从浏览器执行php脚本时设置。

有没有办法从命令行知道服务器的名字?

我尝试了php_uname("n"),正如本次讨论中提出的PHP Server Name from Command Line。但它对我不起作用,它返回我的用户名而不是服务器的名称。

【问题讨论】:

  • 带上_DIR__ 并从那里开始工作?
  • exec("hostname") 如果你在 *nix 机器上。
  • 好吧,你需要知道 PHP 中的 SAPI 有一些不同,当你在 Web 浏览器中运行 PHP 脚本时,你使用的是 HTTP Server SAPI (Apache2 或 nginx 或其他),当您从命令行使用 PHP 时,您使用的是 CLI SAPI,这就是

标签: php


【解决方案1】:

好吧,您需要知道 PHP 中的 SAPI 之间存在一些不同,当您在 Web 浏览器中运行 PHP 脚本时,您使用的是 HTTP Server SAPI(Apache2 或 nginx 或无论如何),因此 $_SERVER 变量中返回的数据将取决于 Web 服务器本身将抛出给 PHP 的标头,而在终端中,您在 CLI SAPI 下运行 PHP,可以说是无服务器 除非您是使用built-in php server

查看 $_SERVER 手册页:-

$_SERVER 是一个数组,包含诸如标题、路径、 和脚本位置。此数组中的条目由网络创建 服务器。无法保证每个 Web 服务器都会提供任何 这些;服务器可能会省略一些,或提供此处未列出的其他内容。 也就是说,大量的这些变量都在 » CGI/1.1 规范,所以你应该可以期待这些。

这再次意味着 $_SERVER 变量将保存的数据将取决于 Web 服务器 将返回/抛出的信息。


作为一种解决方法,您可以检查脚本是否在 CLI SAPI 下运行,然后设置一些 custom values for the $_SERVER 变量

【讨论】:

    【解决方案2】:

    从命令行执行脚本时不涉及“服务器”。你只是在机器上运行一个程序。该机器本身不与任何域名相关联。一台机器可以运行多个 Web 服务器,每个服务器负责多个域。所以$_SERVER['SERVER_NAME'],它来自 web 服务器的配置(例如 Apache 的 ServerName 指令),只有在传入的 HTTP 请求的上下文中才有意义。

    您需要手动配置/告诉您的脚本它应该在哪个域上工作,没有上下文就无法检测到它。

    【讨论】:

      【解决方案3】:

      使用 print_r($_SERVER) 查看服务器变量的所有属性。也许另一个会满足您的需求。

      干杯!

      【讨论】:

      • 这将导致一个小的输出。大多数 SERVER 变量在通过命令行执行时没有值 :) 没有值的变量之一是 SERVER_NAME :)
      猜你喜欢
      • 2010-10-12
      • 2010-11-24
      • 2016-11-28
      • 2017-08-24
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      相关资源
      最近更新 更多