PHP中檔案包含的路徑問題

2022-05-05 06:42:10 字數 1275 閱讀 8702

在程式中當前資料夾下檔案路徑可以表示為3種:1)絕對路徑,2)相對路徑,3)直接檔名

例如在/var/www下的a.php:1)/var/www/a.php 2)./a.php 3)a.php

在php中包含乙個檔案路徑也可以有以上3中方法,但效率是依次遞減的。原因可以通過strace來追蹤。

首先寫乙個test.php:

1

<?php

2

include('a.php');//為了看到檔案包含順序,這個a.php是不存在的

然後strace追蹤test.php的執行

root@cyrec-desktop:/var/www# strace -e file php test.php

可以看到如下:

lstat64("/var/www/./c.php", 0xbfe389f4) = -1 enoent (no such file or directory)

lstat64("/opt/php5/lib/php/c.php", 0xbfe389f4) = -1 enoent (no such file or directory)

lstat64("/var/www/c.php", 0xbfe389f4)   = -1 enoent (no such file or directory)

可以看到包含檔案的查詢過程是 首先在當前目錄中查詢,沒找到(-1)然後到php配置的include_path中查詢,又沒

找到,最後到執行指令碼的目錄查詢,也沒找到。

然後將test.php中的a.php路徑改為./a.php然後再用strace檢視:

lstat64("/var/www/./c.php", 0xbfd2c8d4) = -1 enoent (no such file or directory)

只有這一條查詢記錄,但系統還是要將/var/www/./c.php轉換成/var/www/c.php這樣的絕對路徑。

如果include中使用絕對路徑/var/www/a.php,結果如下:

lstat64("/var/www/c.php", 0xbf92a3d4)   = -1 enoent (no such file or directory)

這是最快的方法,所以在php程式中可以在配置檔案中設定當前資料夾路徑常量,包含的時候組成絕對路徑,提高

效率,又不影響程式的修改。

PHP檔案路徑包含問題

別的程式語言在處理include中的相對目錄時,都是以當前處理的檔案作為基準。也就是說,如果a包含b,b包含c時,c再包含乙個含相對路徑的檔案,那麼路徑是相對於c的。這樣的處理很自然,符合人們的直覺,也便於開發出路徑無關的程式包。但php並不是這樣 它優先相對工作目錄來處理,並且如果路徑中包含.的話...

PHP 包含檔案路徑問題

最近剛剛在學php,在做乙個小專案,用到了很多require和include,被絕對路徑 相對路徑弄的焦頭爛額,最後終於搞明白了。1 php的相對路徑是以執行的指令碼為準,比如a包含b,b包含c,如果a c在同一級目錄,則b裡包含c的路徑應該是相對於a的,如果b c在同一級目錄,則b裡包含c的路徑是...

php中文路徑問題

所有面頁,包括空白的都會報類似下面的錯誤。warning unknown failed to open stream no such file or directory in unknown on line 0 fatal error unknown failed opening required ...