Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP CLI HTTP_主机替代方案_Php_Cron_Command Line Interface - Fatal编程技术网

PHP CLI HTTP_主机替代方案

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 =

我有一个脚本,我想通过cron运行。我在开发环境中处理脚本,如

然后转到生产

其中每一个都为PDO使用不同的用户/过程信息,因此我一直在分解$_服务器['HTTP_HOST']全局,然后检查“dev”或“prod”部分以设置我的$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/