首頁 > 軟體

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


IT145.com E-mail:sddin#qq.com