PHP中include()的使用問題 (轉)
中include()的使用問題
常常見有人詢問關於使用include()時如何定位的問題,大體是這樣:
這樣一個檔案結構
xxxx--|
|-dirA-|
| |-A.php
| |-A2.php
|
|-dirB-|
|-B.php
A.php
////////////////////////////////////
echo('I am A.php . I have been included .'.'
'.chr(10));
include('A2.php');
?>
////////////////////////////////////
A2.php
////////////////////////////////////
echo('Hello , I am A2.php . I have been included .'.'
'.chr(10));
?>
////////////////////////////////////
B.php
////////////////////////////////////
echo('I am B.php . Now begin .');
include('../dirA/A.php');
?>
////////////////////////////////////
有人會遇到訪問B.php報錯的情況————無法找到A2.php,便很困惑的來到菜鳥集中營CSDN江湖求助。
看看大家的回答通常都是告訴無辜的提問者去檢查一下php.ini中有關include_path的設定是否正確,是否包含了當前路徑(用“.”表示)。偶也曾經做了一次不耐煩的大家,現在想起來真是————汗!
在php好後,通常php.ini中的inlcude_path被設定為.;c:phpincludes(平臺)或.:/php/includes(系列平臺,),可以看到其中都是包含當前路徑的。在一些Php分發中的php.ini中include_path前面用“;”註釋掉,這時的inlcude_path內建值為.;c:pear或.:/php4/pear(其中的“4”是因為我使用的Php版本為4.x)。這樣看來,問題通常都不是出在inlude_path變數值上(除非哪個whiteEat非把inlude_path改成外婆家!噢,偶旁邊的外婆家酒店酒菜不錯,價格公道、童叟無欺)。
其實在上面的大家和提問人之間還有一個常被忽略的事實:Php的版本————這一次是小版本差異。
在Php 4.0.x環境下,上面的例子是無法執行的,需要把A.php中的“include('A2.php');”改成“include('../dirA/A2.php');”,或者將A2.php複製一份放到目錄dirB中,這通常都不是我們期望的————任務量太大。
而在Php 4.2.x(含更高)環境下,上面的例子則可以通行無阻,並且前面所作修改後的指令碼、檔案系統結構也可以透過。
清晰了。問題出在不同版本對“.”的解釋不同。在4.0.x中,“.”僅僅被認為是(起始)指令碼的路徑;而在4.2.x中,它還包含當前檔案的路徑。從上面的例子中,當匯入文件A.php後,這時的“.”將同時指向B.php的路徑dirB和A.php的路徑dirA。
寫到這裡,忽然冒出一個問題:如果在4.2.x環境下,在dirB.php中剛好不幸也有一個A2.php檔案,那麼B.php最後會匯入哪個路徑下的A2.php呢?本來想把這個問題留給Php的MM們測試,然後請她們香高天下,但一想到壓榨她們不長的幾分鐘的擦胭抹粉的時間實在於心不忍(“幾”是 百 數量級的)。測試結果顯示將包含dirB下面的A2.php。
歡迎大家把更多的這類“小”問題貢獻出來給我們的菜鳥集中營。
注:上面的例子同樣適用於require方法(以及後來的include_once()、require_once())。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981873/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php中 include,require,include_once,require_once 的區別PHPUI
- 關於轉義符 在php正則中的匹配問題PHP
- PHP 中 include 和 require 的概要及區別介紹PHPUI
- PHP flock 檔案鎖的使用問題PHP
- PHP中 mkdir: Permission denied 問題PHP
- laravel使用中遇到的問題Laravel
- PHP 字串強制轉換為數值問題PHP字串
- Typora 使用中的幾個問題
- thrift使用過程中的問題
- weex使用中的問題記錄
- Vue使用中遇到的程式碼問題Vue
- php中foreach的使用PHP
- php陣列問題PHP陣列
- PHP 常見問題PHP
- vscode“檢測到 #include 錯誤,請更新 includepath。”的問題解決辦法VSCode
- 【問題解決】使用YYYY-MM-dd時間轉換問題
- 使用 SVG transform rotate 解決畫框中的數字跟隨旋轉的問題SVGORM
- 關於PHP佇列的問題PHP佇列
- PHP 與 JS 的編碼問題PHPJS
- 關於PHP的OpenSSL的加密問題PHP加密
- html檔案中的php程式碼被註釋掉的問題HTMLPHP
- LVGL 中圖片使用問題
- #include的作用
- autohotkey qt程式中無法使用的問題QT
- pycharm+python使用中的相關問題PyCharmPython
- Homestesd中更換PHP版本後,PECL安裝擴充套件遇到的PHP版本問題PHP套件
- Laravel 中使用 PHP7.2+symfony 版本問題(嚴重)LaravelPHP
- 關於Filter中ServletRequest強轉HttpServletRequest問題FilterServletHTTP
- 字串轉數字的問題字串
- Matlab轉python的索引問題MatlabPython索引
- php部署到nginx時遇到的問題PHPNginx
- php比較運算子的安全問題PHP
- php傳遞json給jquery的問題PHPJSONjQuery
- Spring中多執行緒的使用及問題Spring執行緒
- 使用 pytz 處理 Python 中的時區問題Python
- redis使用中存在的問題及如何避免(二)Redis
- redis使用中存在的問題及如何避免(一)Redis
- SpringBoot中關於Mybatis使用的三個問題Spring BootMyBatis
- php中return語句的使用PHP