簡體   English   中英

PHP-fpm+nginx 沒有環境變量可用

[英]No environment variables are available via PHP-fpm+nginx

我嘗試通過以下方式修改 php.ini:

variables_order = "GPCSE"
register_globals = On

但是所需的PATH變量既不在$_ENV也不能通過getenv('PATH')
我在Ubuntu 10.04上運行Nginx + PHP-FPM

注意:在控制台中執行以下命令會得到正確的結果:

php -r "echo getenv('PATH');"

我猜PATH是 bash 的環境變量,但只要 php-fpm 不通過 bash 啟動,它就沒有必需的變量。 有什么辦法可以包含它們嗎?

謝謝。

更新#1 :作為臨時解決方案,我發現 PATH 變量存儲在“/etc/environment”文件中。 所以我只是從那里閱讀它。 如果有人需要代碼:

preg_match('/^(PATH)="?([^"]+)"?$/i', file_get_contents('/etc/environment'), $match);
putenv($match[1]."=".$match[2]);

我在將我的 OwnCloud 安裝升級到 8.1 版時遇到了這個問題。

他們在他們的文檔中描述了一個修復

摘要是:在 php5-fpm 配置文件夾中找到www.conf文件(對於 Ubuntu,這是/etc/php5/fpm/pool.d/www.conf )並取消注釋所需的 env[PATH] 行。

可選擇使用php -r "echo getenv('PATH');"的輸出更新變量的內容

默認情況下, PHP-FPM 會清除環境變量(來自www.conf ):

; Clear environment in FPM workers
; Prevents arbitrary environment variables from reaching FPM worker processes
; by clearing the environment in workers before env vars specified in this
; pool configuration are added.
; Setting to "no" will make all environment variables available to PHP code
; via getenv(), $_ENV and $_SERVER.
; Default Value: yes
;clear_env = no

您可以取消注釋最后一行以將clear_env設置為no ,但如果您願意,您可以只設置所需的環境變量:

env[PATH] = $PATH

您可以通過包含路徑指定它: http : //www.php.net/manual/en/ini.core.php#ini.include-path

您可以在 php.ini 中指定它(盡管您可能需要一個特定的路徑而不是包含所有內容)

include_path=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/fo‌ ta/Development/adt -bundle-linux-x86_64-20130917/sdk/platform-tools"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM