为了账号安全,请及时绑定邮箱和手机立即绑定

为什么PHP的主流框架和CMS采用绝对路径而不是相对路径?

为什么PHP的主流框架和CMS采用绝对路径而不是相对路径?

呼唤远方 2019-04-07 09:38:37
按理说,相对路径遍历的目录比绝对路径要少呀。比如../admin/明显要比c:/wamp/www/cms/templates/admin/遍历的目录少。情境:使用include(_once),require(_once)时。注:此处所指的绝对路径是指服务器使用的是文件的物理路径(也称为根相对路径),无论是使用"__DIR__"还是一个变量。此处所指的相对路径是目录相对路径(./xxx.php),不是文件名的相对路径(xxx.php)。可能性1:使用相对路径会解析成绝对路径再执行。结果:手册上表示相对路径不会被解析成绝对路径@jackeychen可能性2:include_path()对效率会有影响。结果:手册上说明除了类似于xxx.php的文件名之外,只要是路径,就不会再使用includepath()(但是@zhaoyi指出php5.2之前相对路径还是会受includepath影响,Laruence在10年的一片文章也提到相对路径受到include_path的影响(其实他指的是文件名的相对目录))附1:PHP手册include函数:被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照includepath指定的目录寻找。如果在includepath下没找到该文件则include最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则include结构会发出一条警告;这一点和require不同,后者会发出一个致命错误。如果定义了路径——不管是绝对路径(在Windows下以盘符或者\开头,在Unix/Linux下以/开头)还是当前目录的相对路径(以.或者..开头)——include_path都会被完全忽略。例如一个文件以../开头,则解析器会在当前目录的父目录下寻找该文件。附2:参考文章《深入理解PHP之require/include顺序》fromLaruence.
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

其实主要的问题是程序设计的问题:
dirA/a1.php,a2.php
其中a1.php包含了a2.php,代码如下:include'a2.php';
dirB/b.php
b.php里面要包含dirA/a1.php,然后a1.php被载入,然后他包含a2.php的代码就出错了。
所以这些框架就只能用绝对路径来了。
                            
查看完整回答
反对 回复 2019-04-07
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

我见到的框架一般是在index.php定义一个ROOT:
像这样子:
define(ROOT,dirname(FILE));
在内部的话解析路径的话就只要加ROOT就好了,不会像你说的那样直接写绝对路径(你说:为什么PHP的主流框架和CMS都是用绝对路径而不是相对路径?)
另外一个问题,相对路径也是要解析成绝对路径然后再去读取目录数据,所以解析的路径都一样的。
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 419 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号