我正在开发一个 PHP Web 应用程序,它也有一些命令行工具。我需要命令行工具来检测环境,以便它们连接正确的数据库凭据等。Web 应用程序通过检查轻松完成此操作,$_SERVER['SERVER_NAME']
但这不适用于 shell 脚本。
我想创建自己的$_SERVER
变量,以便 shell 脚本可以检查。例如:$_SERVER['MYAPP_ENVIRONMENT']
。我该怎么做?
我发现这解决方案,但我没有看到相同的文件/etc/apache2/
。我也发现了这一点,但他们使用.htaccess,我不确定我是否有,mod_env
而且我的应用程序使用它自己的.htaccess 文件,所以每次部署时都必须进行编辑。
我在 Dreamhost VPS 上,运行的是 Ubuntu 12.04 LTS
答案1
如何使用php_sapi_name()
函数(http://php.net/manual/en/function.php-sapi-name.php) 来检测正在使用的服务器 API?
答案2
您可以使用命令行参数来创建不同的参数并使用$argv
数组来访问它们:
<?php
if (PHP_SAPI == "cli") {
var_dump($argv);
}else{
echo 'WebServer';
}
?>
其输出如下:
C:\Users\user>E:\xampp\php\php.exe -f E:\Apache\test\s.php 1st 2nd
array(3) {
[0]=>
string(20) "E:\Apache\test\s.php"
[1]=>
string(3) "1st"
[2]=>
string(3) "2nd"
}
关于$argv:
- 这是一个超级全局阵列。
- 第一项是脚本名称(如果您传递了完整路径,则是完整路径)。
- 还有另一个超级全局变量$argc它保存了 $argv 元素的数量。
- 注册_argc_argv 应该启用,否则
$argv
将为 NULL。 - 当您从浏览器访问脚本时,此变量未定义(仅适用于 CL)。
答案3
正如您幸运地说的那样,Apache 允许此功能(就像SetEnv
在 vhost 配置中写入一样)-它确实有效!
<VirtualHost *:80>
...
SetEnv APPLICATION_ENV "production"
...
</VirtualHost>
因此在 PHP 中你将拥有$_SERVER['APPLICATION_ENV']
值production