【发布时间】: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