我喜欢Apache .conf
文件,明显通常使用的是SetEnv
命令。但是,当我从命令行运行php artisan do:something
时,对.conf文件的同样访问似乎不可用(毕竟命令行中没有“域”或“网站”)。如何从命令行调用PHP时读取SetEnv?
简而言之,什么是替代方法来读取envvar(理想)相同的.conf
文件或从我的代码库以外的某个文件读取以区分环境(不理想但肯定确定)?
我喜欢Apache .conf
文件,明显通常使用的是SetEnv
命令。但是,当我从命令行运行php artisan do:something
时,对.conf文件的同样访问似乎不可用(毕竟命令行中没有“域”或“网站”)。如何从命令行调用PHP时读取SetEnv?
简而言之,什么是替代方法来读取envvar(理想)相同的.conf
文件或从我的代码库以外的某个文件读取以区分环境(不理想但肯定确定)?
运行您的应用程序时,您可以使用.htaccess
parser。
<?php
require_once 'vendor/autoload.php';
if(php_sapi_name() === 'cli') {
$file = new \SplFileObject(__DIR__.'/.htaccess');
$parser = new \Tivie\HtaccessParser\Parser();
$htaccess = $parser->parse(null, IGNORE_WHITELINES|IGNORE_COMMENTS);
foreach($htaccess AS $line) {
if($line->getName() == 'SetEnv') {
putenv($line->getArguments()[0], $line->getArguments()[1]);
}
}
}
仅供参考在现代集装箱世界最好还是使用上的脚本调用或容器图像的指令传递环境变量。
比方说,这是你的脚本(test.php
):
<?php
if(getenv('PASSWORD') === 'blablabla') {
// do something secret
echo 'Psst... I have got a secret to share with You';
}
并执行它想:
PASSWORD=blablabla php test.php
如何看起来Dockerfile
(的一部分):
ENV MODE dev
CMD ['php', 'test.php']
并在php代码:
if(getenv('MODE') == 'dev') {
// enable logger, debugger and etc...
}
我会记住Dockerfile在使用Docker时的想法。解析'.htaccess文件'的问题在于它仍然在代码回购中 - 所以每个环境都会得到相同的值;) –
我猜laravel有'.env'文件,可以从任何环境访问。为什么不保留常见变量? – num8er
好吧,我想将文件保存在应用程序之外,以便代码本身对环境不可知,或者更具体地说不指定它。 –
你能分享'.conf'文件结构吗? – num8er