2017-07-08 91 views
0

最近,我安裝了一個新的Ubuntu服務器,它包含了PHP7。以前,在PHP5.3上(或者它可能是PHP5的後續版本,我可以使用返回服務器主路徑的$_SERVER['HOME'](即/ var/www /)。但是,這在PHP7中不可能是$ _SERVER ['HOME']不再是。

如果我有一個擁有/ var/www // httpdocs文檔根的網站,我該如何獲取/ var/www/part。我無法對其進行硬編碼因爲我的測試服務器(Synology NAS)不使用PHP7,也無法升級到PHP7,因此我需要使用一個恆定的PHP5和PHP7變量來返回相同的結果,以便得到與$ _SERVER相同的結果[ 'HOME']在PHP5中完成了。

我試過使用$_ENV['HOME'],但是當執行一個簡單的die($_ENV['HOME']);時,這似乎不會在我的系統中打印任何內容編輯。

有人能讓我擺脫我的痛苦嗎?

謝謝

+0

只需要注意:'$ _SERVER [「HOME」]從來不是標準的PHP提供的頭文件。這可能是因爲網絡服務器現在也是不同的版本。只要做一個'print_r($ _ SERVER)'你就可以找到你需要的東西。 – apokryfos

+0

感謝@apokryfos。我曾嘗試過,但唯一能看到的是文檔根目錄,但我需要它作爲文檔根目錄的父項。也許我需要看看「string dirname(string $ path [,int $ levels = 1]);」。你會贊同嗎? – Adelphia

+0

那麼,首先你可以嘗試'getenv(「HOME」),最糟糕的情況是'exec(「echo〜」)'試圖讓它更可靠。如果不是,那麼假設您在所有環境中都保持類似的設置,那麼您的建議將會起作用。 – apokryfos

回答

1

好的,感謝@apokryfos,我對問題進行了排序。我也許應該提到我想在文檔根目錄之外包含一個文件(oops,我的不好)。

getenv('HOME')出於某種未知原因返回一個空的字符串在我的服務器上,但我用來克服這個問題的方法是使用dirname選項。

最終的結果是:再次

set_include_path(get_include_path().PATH_SEPARATOR.dirname($_SERVER['DOCUMENT_ROOT'],1)."/includes"); 

感謝您的幫助。

0

如果這是有用的。我最近從PHP-7.0升級到PHP-7.1並遇到同樣的問題。 $_SERVER["HOME"]不再設置。雖然我沒有真正使用它,但我確實發現它有點好奇,所以這是我修復它的方法:安裝並啓用PHP-7.1-FPM並禁用PHP-7.1 apache2 mod。

a2dismod php7.1 
a2enmod proxy_fcgi setenvif 
a2enconf php7.1-fpm 
service apache2 restart 

的想法應該是7.0

版本相似。雖然我並不需要做下一步的問題Environment variables and PHP似乎暗示設置環境變量手動可能需要爲好。

希望它有幫助。