PHP CLI HTTP_HOST替代方案

时间:2014-08-20 00:57:07

标签: php cron command-line-interface

我有一个我想通过cron运行的脚本。我在像......这样的开发环境中处理脚本。

http://dev.domain.com

然后转向生产......

http://prod.domain.com

每个都使用PDO的不同用户/传递信息,所以我一直在爆炸$ _SERVER ['HTTP_HOST']全局,然后检查“dev”或“prod”部分来设置我的$ PDO对象: / p>

$hostArray = explode(".",$_SERVER['HTTP_HOST']);
if($hostArray[0] == 'dev' || $_SERVER['HTTP_HOST'] == '1.2.3.4'){
    $pdo = new PDO("mysql:host=localhost;dbname=dev_db", "devu", "devp");
}
elseif($hostArray[0] == 'prod' || $_SERVER['HTTP_HOST'] == '1.2.3.5'){
    $pdo = new PDO("mysql:host=localhost;dbname=prod_db", "produ", "prodp");
}
// etc.

我知道这不会在CLI中起作用并阅读以下内容:Cron Job $_SERVER issue

虽然知道哪个服务器正在运行脚本,但我不确定是什么。

在这种情况下,所有域都使用公共/ home / dev或/ home / prod结构运行在同一物理服务器上。它们具有不同的IP,并通过cPanel设置为不同的实例。

修改

使用RiggsFolly的建议我通过尝试

查看了环境var中的内容
print_r($_ENV);
exit();

然后使用>从CL运行脚本最后是tmp-debug.txt。查看此文件,我能够看到一些变量。它们看起来和之前我能看到的$ _SERVER相同,但HTTP_HOST却不存在。

我现在所做的工作如下......

if(isset($_SERVER['HTTP_HOST'])){
    ... code from above...
}
elseif(isset($_SERVER['argc']) && isset($_SERVER['PWD'])) {

    $hostArray = explode("/",$_SERVER['PWD']);

    if($hostArray[2] == 'devsite'){
        $pdo = new PDO("mysql:host=localhost;dbname=dev_db", "devu", "devp");
    }
    elseif($hostArray[2] == 'prodsite'){
        $pdo = new PDO("mysql:host=localhost;dbname=prod_db", "produ", "prodp");
    }
}

此设置适用于我的服务器

/home/devsite 

/home/prodsite/ 

设置。我不知道为便携性或安全性这样做是否有任何问题。它确实有用。

0 个答案:

没有答案