如何为 PHP 设置自定义 $_SERVER 变量

如何为 PHP 设置自定义 $_SERVER 变量

我正在开发一个 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

  1. 这是一个超级全局阵列。
  2. 第一项是脚本名称(如果您传递了完整路径,则是完整路径)。
  3. 还有另一个超级全局变量$argc它保存了 $argv 元素的数量。
  4. 注册_argc_argv 应该启用,否则$argv将为 NULL。
  5. 当您从浏览器访问脚本时,此变量未定义(仅适用于 CL)。

答案3

正如您幸运地说的那样,Apache 允许此功能(就像SetEnv在 vhost 配置中写入一样)-它确实有效!

<VirtualHost *:80>
    ...
    SetEnv APPLICATION_ENV "production"
    ...
</VirtualHost>

因此在 PHP 中你将拥有$_SERVER['APPLICATION_ENV']production

答案4

检查环境变量的正确变量是$ENV。这在 CLI 和 Apache 运行的脚本中都有效。

$_ENV['HOSTNAME']

或者您可以在系统中设置任何您想要的环境变量。

相关内容