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的差异,发布之前,在多种平台都要测试通过。对于这个网站系统来说,除了这个问题,还存在文件路径大小写不区分的情况,可见其开发测试人员没有基本的跨平台考量。
相关推荐
farwang 2020-11-25
星愿心愿 2020-11-24
tianhuak 2020-11-24
zhjn0 2020-11-24
昭君出塞 2020-11-23
bluecarrot 2020-11-23
linuxwcj 2020-10-21
以梦为马不负韶华 2020-10-20
彼岸随笔 2020-10-20
yutou0 2020-10-17
applecarelte 2020-10-16
ourtimes 2020-10-16
waterhorse 2020-09-19
MRFENGG 2020-11-11
rainandtear 2020-10-30
kyssfanhui 2020-10-20
liuhangtiant 2020-10-20