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配置文件的環境變量