2017-06-04 96 views
0

我喜欢Apache .conf文件,明显通常使用的是SetEnv命令。但是,当我从命令行运行php artisan do:something时,对.conf文件的同样访问似乎不可用(毕竟命令行中没有“域”或“网站”)。如何从命令行调用PHP时读取SetEnv?

简而言之,什么是替代方法来读取envvar(理想)相同的.conf文件或从我的代码库以外的某个文件读取以区分环境(不理想但肯定确定)?

+0

我猜laravel有'.env'文件,可以从任何环境访问。为什么不保留常见变量? – num8er

+0

好吧,我想将文件保存在应用程序之外,以便代码本身对环境不可知,或者更具体地说不指定它。 –

+0

你能分享'.conf'文件结构吗? – num8er

回答

0

运行您的应用程序时,您可以使用.htaccessparser

<?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... 
} 
+0

我会记住Dockerfile在使用Docker时的想法。解析'.htaccess文件'的问题在于它仍然在代码回购中 - 所以每个环境都会得到相同的值;) –