2021-05-12 14:32:11
Linux檔案路徑中所有目錄名必須都存在,而Windows不需要
2020-06-16 18:03:45
問題由來
昨天部署一個基於ThinkPHP3.1開發的網站,其開發者的開發測試環境為Windows+Apache+PHP。部署到Linux+Apache+PHP下面時不能執行,檢視紀錄檔提示頁面模板不存在。
模板不存在[./Web/Tpl/Home/Index/../index.html]
事實是./Web/Tpl/Home/index.html這個檔案確實存在,而且讀寫許可權設定正確。但是,./Web/Tpl/Home/Index 這個目錄是不存在的,雖然最終的路徑結果都是同一個index.html檔案,但是使用的中間路徑寫法不同。
原因分析
通過測試發現,在Linux平台,./Web/Tpl/Home/index.html 可以存取,而./Web/Tpl/Home/Index/../index.html 卻不能存取,提示不存在檔案。這一點可以在命令列下測試:
[root@CentOS192 htdocs]# ll ./Web/Tpl/Home/Index/../index.html
ls: 無法存取./Web/Tpl/Home/Index/../index.html: 沒有那個檔案或目錄
[root@centos192 htdocs]# ll ./Web/Tpl/Home/index.html
-rw-rw-r-- 1 apache apache 11459 3月 23 15:27 ./Web/Tpl/Home/index.html
[root@centos192 htdocs]#
而在Windows平台下,這兩個路徑都可以存取。
C:UserssmstongDesktophtdocs>attrib ./Web/Tpl/Home/index.html
A C:UserssmstongDesktophtdocsWebTplHomeindex.html
C:UserssmstongDesktophtdocs>attrib ./Web/Tpl/Home/Index/../index.html
A C:UserssmstongDesktophtdocsWebTplHomeindex.html
可見,Linux和Windows系統對路徑的處理有些不同,相比來說,Linux更加嚴謹一些。
一點思考
如果專案需要跨平台執行,在開發時就應該考慮到不同OS的差異,發布之前,在多種平台都要測試通過。對於這個網站系統來說,除了這個問題,還存在檔案路徑大小寫不區分的情況,可見其開發測試人員沒有基本的跨平台考量。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-03/115400.htm
相關文章