PHP CLI HTTP_主机替代方案
我有一个脚本,我想通过cron运行。我在开发环境中处理脚本,如 然后转到生产 其中每一个都为PDO使用不同的用户/过程信息,因此我一直在分解$_服务器['HTTP_HOST']全局,然后检查“dev”或“prod”部分以设置我的$PDO对象:PHP CLI HTTP_主机替代方案,php,cron,command-line-interface,Php,Cron,Command Line Interface,我有一个脚本,我想通过cron运行。我在开发环境中处理脚本,如 然后转到生产 其中每一个都为PDO使用不同的用户/过程信息,因此我一直在分解$_服务器['HTTP_HOST']全局,然后检查“dev”或“prod”部分以设置我的$PDO对象: $hostArray = explode(".",$_SERVER['HTTP_HOST']); if($hostArray[0] == 'dev' || $_SERVER['HTTP_HOST'] == '1.2.3.4'){ $pdo =
$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中不起作用,请阅读以下内容:
我不知道是什么,如果有什么是可用的,虽然知道哪台服务器正在运行脚本
在这种情况下,所有域都运行在具有公共/home/dev或/home/prod结构的相同物理服务器上。它们具有不同的IP,并通过cPanel作为不同的实例进行设置
编辑
使用RiggsFolly的建议,我通过尝试查看环境中的内容
print_r($_ENV);
exit();
然后从CL运行脚本,最后使用>tmp-debug.txt。查看此文件时,我可以看到一些变量。它们看起来和我以前看到的$服务器一样,但是HTTP主机不在那里
我现在要做的是
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
及
设置。我不知道是否有任何问题,这样做的便携性或安全性。不过,它确实可以工作。您确实可以使用
getenv()访问$\u服务器和环境。
对您有任何用处。当然,始终存在argv
,argc
参数,因此您可以使用script.php LIVE
和script.php测试
/home/prodsite/