Linux文件路径中所有目录名必须都存在,而Windows不需要


Linux文件路径中所有目录名必须都存在,而Windows不需要

Linux文件路径中所有目录名必须都存在而Windows不需要 问题由来 原因分析 一点思考

问题由来

昨天部署一个基于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:\Users\smstong\Desktop\htdocs>attrib ./Web/Tpl/Home/index.html
A            C:\Users\smstong\Desktop\htdocs\Web\Tpl\Home\index.html

C:\Users\smstong\Desktop\htdocs>attrib ./Web/Tpl/Home/Index/../index.html
A            C:\Users\smstong\Desktop\htdocs\Web\Tpl\Home\index.html

可见,Linux和Windows系统对路径的处理有些不同,相比来说,Linux更加严谨一些。

一点思考

如果项目需要跨平台运行,在开发时就应该考虑到不同OS的差异,发布之前,在多种平台都要测试通过。对于这个网站系统来说,除了这个问题,还存在文件路径大小写不区分的情况,可见其开发测试人员没有基本的跨平台考量。

相关内容