關於php的getenv()方法獲取環境變量的問題


php文件的執行

我們比較常用的執行php文件方式有兩種

一種是通過瀏覽器訪問服務器(比如apache),然后由服務器來運行相應的php文件

另一種就是通過shell直接運行php命令或者在shell腳本文件中運行php命令的方式來執行php文件

直接運行php命令

php /var/www/borg/oil refine test

在shell腳本文件中運行php命令

bash /var/www/borg/fuel/app/tasks/test.sh

 

test.sh

#!/bin/bash

export tt="test***in test.sh"     //此處的環境變量tt可以被test.php文件中的getenv取到,當然,此時的shell進程中的所有環境變量都可以被取到
php_command="php /var/www/borg/oil refine test"

resutl=$($php_command)

 

test.php

<?php
namespace Fuel\Tasks;

//同期ファイル作成バッチ
class Test
{
    public static function run($sync_mode=null, $date_from="", $date_to="")
    {
        \Log::debug("test.sh");
        \Log::debug(getenv("tt"));
    }

}

 

apache配置文件中的環境變量

<VirtualHost *>
  ServerName borg-localhost
  DocumentRoot /var/www/borg/public
  DirectoryIndex index.html index.php index.cgi
  SetEnv FUEL_ENV development      //此處的環境變量通過瀏覽器訪問服務器apache的方式是可以通過getenv取到的,dan通過命令行運行php的方式是取不到的                        //此處的環境變量通過$_SERVER["FUEL_ENV"]的方式也是可以取道的 <Directory "/var/www/borg/public">
    AllowOverride All
    #AllowOverride AuthConfig
    Options Indexes FollowSymLinks
    Require all granted
 </Directory>

 

這兩種方式通過getenv獲取環境變量時有所不同

通過瀏覽器的方式訪問時,getenv可以獲取到在apache配置文件中的環境變量,而無法獲取linux主機的環境變量(比如/etc/environment,/etc/profile等文件中設置的環境變量)

而通過shell命令行的方式運行php時,getenv可以獲得運行php時的shell進程的環境變量,而無法獲得apache配置文件中設置的環境變量

 

個人原因猜測,apache運行php時,並不會加載apache所在linux系統的環境變量,而shell命令行的方式運行php文件時,因為沒有通過apache,所以也不會加載apache配置文件的環境變量

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM