我正在构建一个每天运行一系列cron任务的网站,以更新数据库中的信息,然后在网站中使用该数据库。我有三种环境设置:开发(我的电脑),升级和现场。 staging和live都是共享主机上的帐户。我遇到的问题是决定使用哪些数据库访问凭据,具体取决于运行代码的环境。理想情况下,所有三个都具有相同的凭据,但由于staging和live都在共享服务器上,因此我无法控制数据库的名称。我在我自己的计算机上镜像了实时数据库名称和访问凭据,但是在暂存时我不能这样做。
我想要做的是在我的cron任务运行时自动为正确的环境选择正确的凭据,如下所示:
if(environment === staging) {
//define db access constants for staging here
else {
//define db access constants for live or dev here
}}
通常对于这种事情,我会使用$ _SERVER ['SERVER_NAME'],但由于这是在Cron中运行的,因此$ _SERVER auto global不可用。我如何检测脚本在cron作业中运行的环境?
答案 0 :(得分:1)
您可以在crontab文件中添加一个额外的环境变量:
STAGING=1
然后检查$_ENV['STAGING'] == 1
。
甚至
HOSTING_ENV=PRODUCTION
然后检查$_ENV['HOSTING_ENV'] == 'PRODUCTION'
。
答案 1 :(得分:1)
ajreal和gms8994都很好的环境变量解决方案。另一种方法是使用php_uname()来获取当前主机名:
sean@gimmebarvm-sean:~$ php -r 'echo php_uname("n") . "\n";'
gimmebarvm-sean
答案 2 :(得分:1)
通过WGET运行你的cron,通过域调用它而不是PHP命令行
然后您将能够通过其域
检测平台