PHP 站点相对包含,路径的问题解决方法(include,require)
以前看了,很多框架,基本上很少使用相对路径包含。而一般很多做php web站点,喜欢用相对路径。 认为这样,无论目录放到那里。 只要跟另外目录关系一致。那么就不会出现问题。如果一个站点,一般都认为,如果用根目录,经常会改变网站地址,觉得很不方便。其实,我们从各大常见框架里面会发现,基本上都是采用是绝对路径方法。
相对路径带来问题
我们有如下结构的目录。
<web>(网站根目录)
├<a>文件夹
│ │
│ └a.php
├<b>文件夹
│ │
│ └b.php
└test.php
如果b.php 包含a.php (include(“../a/a.php”)) ,然后test.php 包含b.php (include(“b/b.php”)) ,我们发现很奇怪问题。
首先访问:b.php 可以正常访问, 然后访问test.php
发现,找不到 a.php了。 这里注意一个问题是:php 默认相对路径都是以,被访问页面所在路径为准的。无论一个入口页面,里面包含多少文件,相对路径,都是以这个页面为准。
如果访问test.php 根路径是:test.php,如果访问b.php 相对路径都以b.php 所在路径为准。刚刚页面test.php 包含了b.php,b.php包含了a.php. 所有包含都以test.php 为准的。
估计刚刚开始php学习朋友,经常遇到这个问题,而且发现经常出现一大堆警告影响大家学习的兴趣。
使用绝对路径方法
各大开源框架基本上采用绝对路径方法,这样可以避免相对路径因为包含访问文件变了。基准路径变化,让包含出现错误了。 所以,我们看看常见方法。
首先将网站基准订到一个固定文件。一般可以用下面方法实现。如:根目录下面有个config.php文件。
<?php
define(‘Root_Path’,dirname(__FILE__));
__FILE__ 至的是当前脚本路径,在那个脚步php里面调用该变量,它的值就是该脚步的绝对路径。
然后,任何其它页面,在做包含时候,只需要包含了该config.php后。
<?php
包含config.php…..
include(Root_Path.”/文件路径”);即可
使用绝对路径好处
使用解决路径好处除了可以在大型项目中,包含时候更准确定位到文件,不易产生错误外。还有另外一个好处,包含文件,性能会得到很大提升。
如果给一个相对位置包含,php查找该文件,一般会在set_include_path 函数,设置的所有路径里面去搜索。 我们知道,要一个一个去尝试,列举目录,然后查找文件。这直接会消耗大的IO。 也会消耗很多性能。 如果我们用绝对包含,直接就可以准确判断出,文件是否存在。不会去set_include_path设置目录去查找了。
以上问题,对于刚刚接触到php大型项目开发,可能会很容易遇到。欢迎讨论!
暂无相关文章!
PHP 站点相对包含,路径的问题解决方法(include,require)的更多相关文章
- Win7/Win2008下IIS配置Asp站点启用父路径的设置方法
iis日志错误如下: 修改路径文件权限问题依旧. 解决方式:
- VS2010 项目属性的默认包含路径设置方法
VS2010 项目属性的默认包含路径设置方法 分类: c++小技巧2014-01-10 10:16 1358人阅读 评论(0) 收藏 举报 c++ 有两种方法可以设置vs2010的默认包含路径 方法一 ...
- (转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
在JSP中,页面链接是使用web路径的,但如果JavaBean要访问本地文件读取配置信息的话,是需要文件的本地路径的.如果你在写 Bean的时候直接将本地路径写进去,那网站的路径就不能变化,丧 ...
- vs2015第二次装安装不能选择路径问题解决方法
vs2015卸载后注册表还会存在vs2015的信息,下次安装的时候会读注册表里面记录的路径,不能自己选择路径. 解决方法: 1.在vs安装文件的路径打开命令,shift+鼠标右键 2.输入命令:cn_ ...
- java 获取路径的各种方法
(1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...
- java ----获取路径的各种方法(总结)
Java Web开发中路径问题小结 (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 那么针对这个站点的几个基本概念表述如下: 1. web站点的根目录:http: ...
- 【转载】java 获取路径的各种方法
转载只供个人学习参考,查看请前往原出处:http://www.cnblogs.com/guoyuqiangf8/p/3506768.html 主要方法有: (1).request.getRealPat ...
- win7中VS2010中安装CSS3.0问题解决方法
win7中VS2010中安装CSS3.0问题解决方法 在安装Standards Update for VS2010 SP1后,VS2010中没有CSS3.0问题,以下是我的解决方法 1.首先去官网 ...
- win8安装SQL Server 2005问题解决方法
win8安装SQL Server 2005问题解决方法 1.正常安装任一版本的SQL Server 2005(最好安装企业版). 2.安装到SqlServer服务的时候提示启动服务失败(提示重试的时候 ...
随机推荐
- HOLOLENS 扫描特效 及得出扫描结果(SurfacePlane)
HOLOLENS 扫描特效 及得出扫描结果(SurfacePlane) 要求只扫出地板和墙, 由于地板和墙面积较大 扫描结果 HOLOTOOLKIT老版本点在参数调节PlaneFinding.Find ...
- python框架之django
python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...
- 主席树——求静态区间第k大
例题:poj2104 http://poj.org/problem?id=2104 讲解:http://blog.sina.com.cn/s/blog_6022c4720102w03t.html ht ...
- dubbox升级spring到4.x及添加log4j2支持
今天花了点时间,把dubbox依赖的spring从3.x升级成最新版的4.x了,其它一些依赖的组件也顺带升级了,同时dubbo支持的第三方日志组件居然没有log4j2,加了点代码也一并支持了,蛋疼的是 ...
- [LeetCode] Sort Characters By Frequency 根据字符出现频率排序
Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Input: ...
- 基于C/S架构的3D对战网络游戏C++框架_【不定期更新通知】
由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...
- java的反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- Android基础总结(四)
网络图片查看器 确定图片的网址 发送http请求 URL url = new URL(address); //获取连接对象,并没有建立连接 HttpURLConnection conn = (Http ...
- 纯css,编写菜单移入效果
<!doctype html><html lang="en"><head> <meta charset="UTF-8" ...
- html5定位getLocation()
HTML5 Geolocation API 用于获得用户的地理位置. 如果用户不允许定位,那么用户信息是不可用的. 获取用户的位置:getCurrentPosition() 返回数据如下 返回用户当前 ...