我有一个我想通过cron运行的脚本。我在像......这样的开发环境中处理脚本。
然后转向生产......
每个都使用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/
设置。我不知道为便携性或安全性这样做是否有任何问题。它确实有用。