在程序中当前文件夹下文件路径可以表示为3种:1)绝对路径,2)相对路径,3)直接文件名

例如在/var/www下的a.php:1)/var/www/a.php 2)./a.php 3)a.php

在PHP中包含一个文件路径也可以有以上3中方法,但效率是依次递减的。原因可以通过strace来追踪。

首先写一个test.php:

1
<?php

2
include('a.php'); //为了看到文件包含顺序,这个a.php是不存在的

然后strace追踪test.php的执行

root@Cyrec-desktop:/var/www# strace -e file php test.php

可以看到如下:

lstat64("/var/www/./c.php", 0xbfe389f4) = -1 ENOENT (No such file or directory)
lstat64("/opt/php5/lib/php/c.php", 0xbfe389f4) = -1 ENOENT (No such file or directory)
lstat64("/var/www/c.php", 0xbfe389f4)   = -1 ENOENT (No such file or directory)
可以看到包含文件的查找过程是 首先在当前目录中查找,没找到(-1)然后到PHP配置的include_path中查找,又没

找到,最后到执行脚本的目录查找,也没找到。

然后将test.php中的a.php路径改为./a.php然后再用strace查看:

lstat64("/var/www/./c.php", 0xbfd2c8d4) = -1 ENOENT (No such file or directory)

只有这一条查找记录,但系统还是要将/var/www/./c.php转换成/var/www/c.php这样的绝对路径。

如果include中使用绝对路径/var/www/a.php,结果如下:

lstat64("/var/www/c.php", 0xbf92a3d4)   = -1 ENOENT (No such file or directory)

这是最快的方法,所以在PHP程序中可以在配置文件中设置当前文件夹路径常量,包含的时候组成绝对路径,提高

效率,又不影响程序的修改。

PHP中文件包含的路径问题的更多相关文章

  1. 实战经验丨CTF中文件包含的技巧总结

    站在巨人的肩头才会看见更远的世界,这是一篇技术牛人对CTF比赛中文件包含的内容总结,主要是对一些包含点的原理和特征进行归纳分析,并结合实际的例子来讲解如何绕过,全面细致,通俗易懂,掌握这个新技能定会让 ...

  2. TP5中文件的写入路径有的会被自动重定向到首页

    TP5中文件的写入路径有的会被自动重定向到public public function export() { $model=model('FanweUser'); $list=$model->w ...

  3. java中文件的相对路径以及jar中文件的读取

    Java中File类的构造函数需要我们传入一个pathname,当我们传入以"/"开头的pathname表示绝对路径,其他均表示相对路径. 一:绝对路径名:是完整的路径名,不需要任 ...

  4. CTF中文件包含的一些技巧

    i春秋作家:lem0n 原文来自:浅谈内存取证 0x00 前言 网络攻击内存化和网络犯罪隐遁化,使部分关键数字证据只存在于物理内存或暂存于页面交换文件中,这使得传统的基于文件系统的计算机取证不能有效应 ...

  5. PHP中文件类型 文件属性 路径以及 文件相关的函数

    一: 文件类型判断: 1.is_dir()  判断是不是目录 2.is_file() 判断是不是文件 3.is_executable() 判断是不是可执行文件 4.is_readable()  判断是 ...

  6. Java中文件上传路径与路径修改相关问题(tomcat8.0+eclipse)

    1.普通文件上传的路径: 通过getRealPath获取相关路径 String photoFolder =request.getServletContext().getRealPath("u ...

  7. 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bccced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  8. php学习笔记6--php中的文件包含 include,require,include_once,require_once

    php中的文件包含 include,require,include_once,require_once 文件包含:是指将一个文件的内容包含进另外一个文件,有利于代码的复用等.php中文件包含指令有4个 ...

  9. 2019-10-8:渗透测试,基础学习,php基础,会话,文件包含,笔记

    php面向对象基础->调用符号构造函数construct,主要用来创建对象时初始化对象,为成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 析构函数destructor,与构造函数相 ...

随机推荐

  1. Ubuntu Linux系统下的SVN客户端工具PySVN

    在Windows下面一直在用TortoiseSVN做为SVN客户端工具,但它居然没提供Linux版本,无视Linux用户的存在.它视我如空 气,偶视它如废土.开始探索尝试其他跨平台的SVN客户端,最后 ...

  2. How to install / setup /upgrade PHP 5.5.x on Ubuntu 12.04 LTS

    原文:http://www.dev-metal.com/how-to-setup-latest-version-of-php-5-5-on-ubuntu-12-04-lts/ 最近遇到了要在ubunt ...

  3. Winform带dataGridview的Combox控件

    调用控件: public partial class Form1 : Form { public Form1() { InitializeComponent(); //---------------- ...

  4. highcharts 去掉打印和链接

    1)去掉或更改图片右下角的链接 在highcharts.js文件中搜索credits字符串,找到如下的字符串, enabled:设置是否显示链接 text:设置链接显示的名称 href:设置链接的ur ...

  5. CodeForces 76E Points

    给出n个点,求任意两点间距离的平方和. 暴力显然超时,可以把公式写出来,化简一下,发现预处理一下后缀和就可以o(n)出解了. #include<cstdio> #include<cs ...

  6. js - object的属性操作

    视频学习地址: http://www.imooc.com/video/6002 原文PPT下载地址: http://img.mukewang.com/down/54c5ec1a000141f10000 ...

  7. MemSQL 取代 HDFS 与 Spark 结合,性能大幅提升

    MemSQL 取代 HDFS 与 Spark 结合,性能大幅提升 3,597 次阅读 - 基础架构 Apache Spark是目前非常强大的分布式计算框架.其简单易懂的计算框架使得我们很容易理解.虽然 ...

  8. 已有 JS 模块化和打包方案收集

    模块化方案 RequireJS AMD 方案, 常用的 define 语法, 异步加载模块, 目前很多支持: 官网 http://requirejs.org/ Github https://githu ...

  9. Sping--AOP--Annotation

    Aspectj 概念: 1. joinpoint:切入点, 比如@Before, @After, @Around 2. Pointcut:切入点集合, 比如 @Pointcut("execu ...

  10. nginx+fastcgi php 使用file_get_contents、curl、fopen读取localhost本站点.php异常的情况

    原文:http://www.oicto.com/nginx_fastcgi_php_file_get_contents/ 参考:http://os.51cto.com/art/201408/44920 ...