在 PHP CLI 脚本中检测环境

php
2022-08-30 22:09:15

我在StackOverflow上看到了几个问题,这些问题处理了当脚本通过Apache提供时如何检测用户环境,并拥有这样一个完美运行的系统。该脚本依赖于 Apache 设置的环境变量。

现在我正在创建几个需要在php CLI模式下运行的工具,但我不知道如何在CLI模式下检测环境,因为那里不存在apache env vars。

我正在考虑使用gethostname()读取服务器的主机名,但不知道这是否是最佳解决方案和可靠的解决方案。

在使用 PHP 的 CLI 模式下运行时,检测环境的最佳方式是什么

澄清:
我不是在寻找一种方法来检测我是否正在从CLI运行脚本,该基础已被覆盖。我正在寻找一种方法来确定我的脚本通过CLI在哪个服务器(DEV,STAGING或生产)上运行,从而不读取VHOST中设置的apache env变量,这些变量在通过浏览器运行相同的脚本时存在。


答案 1

您可以使用 来获取当前计算机的主机名。从那里开始,您的实现可以确定它是生产,过渡还是开发,无论是基于主机名,硬编码值还是其他配置文件中的模式。php_uname('n')


答案 2

我会将变量设置为(或基于操作系统风格的等效变量),例如 ./etc/environmentMYAPP_ENV=STAGING

这将神奇地被 CLI php 运行时自动拾取,并在 Global 变量中可用,如下所示:$_SERVER_$SERVER['MYAPP_ENV']

如果您希望无论脚本从 HTTPD 还是 CLI 运行,这都能正常工作,则还需要在 .htaccess 或 vhosts.conf apache 文件中为您的应用设置此变量(假设是 apache),如下所示:SetEnv MYAPP_ENV STAGING

从应用程序代码中,您只需要引用即可访问此变量,而不管调用是从 CLI 还是通过 http。_$SERVER

糟糕的是,您必须在计算机上设置此变量两次 - 一次用于Apache,一次用于CLI,但至少从应用程序层来看,在读取环境变量时,您可以对执行运行时保持不可知论。


推荐