[英]relative File path in php
簡潔版本:
相對路徑如何在php中運行?
長版:
我有一個本地網站( http://test.com ), E:\\test\\
是它的文檔根目錄。 這是我的目錄樹:
和文件內容:
E:\\測試\\ 001.php
<?php
include('mysql/first.php');
?>
E:\\測試\\ exit.php
<?php
die('What?');
?>
E:\\測試\\ death.txt
Bonjour
E:\\測試\\ mysql的\\ first.php
<?php
echo file_get_contents('death.txt');
include('exit.php');
?>
E:\\測試\\ mysql的\\ death.txt
Hello there
E:\\測試\\ mysql的\\ exit.php
<?php
die('DONE');
?>
如果我瀏覽http://test.com/001.php
並且E:\\test\\exit.php
和E:\\test\\death.txt
存在,我得到這個:
BonjourWhat?
如果它們不存在:
Warning: file_get_contents(death.txt) [function.file-get-contents]: failed to open stream: No such file or directory in E:\test\mysql\first.php on line 2
DONE
如何在php中運行相對路徑? 我認為它應該給我兩個文件的警告或顯示正確的輸出!
我正在使用XAMPP,php 5.3在Win7 x64上測試此代碼。
這就是php.net上的文檔描述PHP include
搜索機制的方式:
當我運行你的腳本時,我的include路徑設置為.:
默認情況下(當前目錄,沒有別的),所以當我嘗試從mysql/first.php
加載death.txt
和exit.php
,它應該搜索./
文件夾是當前目錄。 但是...... 事實並非如此 。 當前目錄應該是mysql/
但它沒有指向那里......那么這里發生了什么?
PHP非常特別......讓我們回滾到我們做的第一個聲明。 什么是PHP解釋在我們的include path
時使用.
實際上是一個路徑解決方案! 所以,看看我們的道路,我們有.
使用include_path無法解釋( ./.
再次?)任何內容。 然后,PHP必須轉到第二個路徑解析(2),它是我們腳本的根目錄。 (你有頭疼嗎?因為我這樣做)
使用get_include_path()
和realpath()
可以觀察到:
Included path: '.:'
Including mysql/first.php: /Users/Kouno/Development/SandBox/test-php/mysql/first.php
This is what `realpath` returns for './': /Users/Kouno/Development/SandBox/test-php
Getting content of death.txt: /Users/Kouno/Development/SandBox/test-php/death.txt
Bonjour
Including exit.php: /Users/Kouno/Development/SandBox/test-php/exit.php
What?
然后,為什么它特別無法加載mysql/death.txt
但仍然找到mysql/exit.php
,一旦你從根目錄中刪除death.txt
和exit.php
? 它應該找到它們兩個,對吧?
好吧,這是因為get_file_content
有第二個參數默認忽略include_path
。
如果設置第二個參數:
echo file_get_contents('death.txt', FILE_USE_INCLUDE_PATH);
然后你會得到預期的結果。
Included path: '.:'
Including mysql/first.php: /Users/Kouno/Development/SandBox/test-php/mysql/first.php
Getting content of death.txt: (no path returned)
Hello there
Including exit.php: (no path returned)
DONE
有趣的是get_file_content()
將開始使用與include
相同的機制(這在php.net上沒有正確記錄)。 並且realpath()
甚至根本沒有實現這種機制(這解釋了為什么我no path returned
顯示的no path returned
)。
希望這可以幫助!
first.php在E:\\ test \\ mysql中找到文件death.txt。 您可以使用:
echo file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'death.txt');
要么:
echo file_get_contents('..' . DIRECTORY_SEPARATOR . 'death.txt');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.