【问题标题】:PHP: Identifying the local server consistentlyPHP:一致地识别本地服务器
【发布时间】:2018-02-01 03:24:42
【问题描述】:

我有一个代码库,要部署到多个服务器。

我需要确定代码在哪个服务器上运行,以便为数据库等使用正确的配置信息。

我最初尝试使用 DOCUMENT_ROOT 并检查帐户名称。

if (strpos($_SERVER['DOCUMENT_ROOT'], '/var/www/vhosts/SOMETHING.com/') !== false)
{ //is a specific server }

这很好用,但是我发现当我的 cron 作业执行时 DOCUMENT_ROOT 是空的,当从 Plesk 启动时。

是否有更好的方法来识别服务器?

我不希望有特定于服务器的配置文件,因为确保所有文件在所有服务器上都相同的 FTP 同步软件不支持排除某些文件。

另外,服务器可能运行不同的控制面板和设置,所以我希望尽可能通用。

【问题讨论】:

  • 这些 cron 作业负责运行一些用 PHP 编写的控制台应用程序,对吧?你如何设置它们?手动在每台服务器上?在这种情况下,您可以将服务器名称作为命令行参数传递给控制台应用程序。
  • 如果您从命令行运行 PHP,则不涉及 Web 服务器。所以$_SERVER 不会返回任何东西。您可以从命令行运行一个hostname 命令。也许可以尝试使用exec() 来通过 PHP 阅读它?
  • @Nima,谢谢,我没想过通过 cron 命令传递服务器信息。
  • @Andy,谢谢,这为我指明了正确的方向,因为当 php 脚本被称为 cron 作业时,我发现 $_SERVER['HOME'] 与 DOCUMENT_ROOT 相同。

标签: php apache server cpanel plesk


【解决方案1】:

您可以在设置 cron 作业时将服务器名称作为命令行参数传递。

【讨论】:

    【解决方案2】:

    我发现 $_SERVER['HOME'] via cron 和 DOCUMENT_ROOT 是一样的。

    这同样适用于 cron 的 plesk 和 cpanel 实现。

    我相信这比通过 cron 命令传递参数要好,因为我仍然需要对其进行测试,并且还必须为每个服务器设置 cron,而不是在脚本中处理它。

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      相关资源
      最近更新 更多