今天遇到一个问题:php,incldue_once引入多次文件,多层引用,所以,不同目录下的文件要使用一个文件得先确定目录,比如(下例是提取出来的精简例子,组织的有点乱乱的):

/homepage/index.php文件include引入了/homepage/temp1/index.php

首页文件(/homepage/temp1/index.php)以及 列表文件(/homepage/temp1/news_list.php)

都引入了一个top.php文件,里面需要访问homepage下的a.png文件,现在需要不通过绝对路径,通过相对路径访问,但是

首页文件(/homepage/temp1/index.php)是通过/homepage/index.php访问的,$_SERVER["PHP_SELF"] 输出:/blog/Homepage/index.php

列表文件(/homepage/temp1/news_list.php)是通过/homepage/temp1/news_list.php访问的,$_SERVER["PHP_SELF"] 输出:/blog/Homepage/temp1/news_list.php

现在如果有变量可以直接锁定到固定的目录下就Ok了,

function chdirdir(){//锁定homepage
$dir=dirname($_SERVER["PHP_SELF"]);
while(strpos($dir,'temp')!==false){
$dir=dirname($dir); }
return $dir;
}

判断路径中有没有temp字符串,有就去掉/后取上级...

现在在首页和列表都可以如此调用:

$dirx=chdirdir();
echo "<img src=$dirx/a.png>";

虽然dirname()介绍为:本函数返回去掉文件名后的目录名。但是发现它可以每次取/后面字符以达到取到目录效果,这里用了这个小bug或者feature。

p.s.还是用框架好,这次这个领导又一意孤行的要逼死谁要用原生的。TP用习惯了这次在原生里还写了类似的U方法,不过比TP的弱多了,其实有点像ajax执行方式。

  本来想用chdir(),可能不会用,最后也没用上。

  通过 php应用路径变量问题总结 整理了一个输出路径的函数,

function paths(){
$pathsarr=array(
'当前请求的 Host:'=>$_SERVER["HTTP_HOST"],
'请求执行文件的相对地址:'=>$_SERVER["PHP_SELF"],
'实际执行文件相对地址:'=>$_SERVER["SCRIPT_NAME"],
'实际执行文件的绝对路径:'=>$_SERVER["SCRIPT_FILENAME"],
'实际执行代码的绝对路径:'=>__FILE__,
'url请求中包括/和之后的所有内容:'=>$_SERVER["REQUEST_URI"],
'url请求中?之后的内容:'=>$_SERVER["QUERY_STRING"],
'文档根目录:'=>$_SERVER["DOCUMENT_ROOT"],
'请求执行文件的的文件名:'=>basename($_SERVER["PHP_SELF"]),
'实际执行文件的文件名:'=>basename($_SERVER["SCRIPT_NAME"]),
'实际执行文件的文件名:'=>basename($_SERVER["SCRIPT_FILENAME"]),
'实际执行代码的文件名:'=>basename(__FILE__),
'请求执行文件的的所在目录:'=>dirname($_SERVER["PHP_SELF"]),
'实际执行文件的所在目录:'=>dirname($_SERVER["SCRIPT_NAME"]),
'实际执行文件的所在目录:'=>dirname($_SERVER["SCRIPT_FILENAME"]),
'实际执行代码的所在目录:'=>dirname(__FILE__),
'dir:'=>__DIR__ //dirname(__FILE__)和__DIR__一样一样的
);
var_dump($pathsarr);
}

PHP中include引用导致不能再次相对引用文件的一个小问题的更多相关文章

  1. 痞子衡嵌入式:关于i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区. 关于串行四线NOR Flash,当其作 ...

  2. python中循环引用导致内存泄漏小案例

    首先定义一个Person类和一个Dog类,然后分别实例化对象p和d,给p对象添加一个pet属性 给d对象添加一个master属性此时Person和Dog的应用计数都为2,当del p 和del d后P ...

  3. asp.net mvc中应用缓存依赖文件(xml)的一个小demo

    最近项目中加了一个通用模块,就是根据一些特殊的tag,然后根据处理这些tag在同一个视图中加载不同的model(个人觉得此功能无任何意义,只是把不同的代码放在了同一个View中). 我的处理思路是这样 ...

  4. 关于node中的global,箭头函数的this的一个小问题

    this一直是一个JS中的困扰问题,这次在跑JS精粹的代码的时候顺带发现了Node里面全局变量的问题 var x = 1; var myObj = { x: 2 }; myObj.func = fun ...

  5. api重复引用导致的诡异问题排查

    api重复引用导致的诡异问题排查 最近一个项目上线前开发环境.测试环境都能正常打包并运行.然而到了准生产环境和生产环境则报一些诡异的错误信息: [INFO] --------------------- ...

  6. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug

    前言: 话说昨晚还是前晚,写了一篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上) 文章写到最后时,多了很多莫名奇妙的问题!!! 为了解决了这些莫名奇妙的问题,我又战斗了2 ...

  7. 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(下)- block中任性用self

    前言: 在处理完框架内存泄漏的问题后,见上篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug 发现业务代码有一个地方的内存没释放,原因很也简单: ...

  8. vs LNK2019 无法解析的外部符号 ***,该符号在函数 WinMain 中被引用

    一般链接错误都是因为包含头文件与lib库不匹配(无导出函数.lib库的release debug版本混乱.库引用的优先级.编译器设置mt/mtd等等)造成的. 错误    LNK2019    无法解 ...

  9. PHP中include()与require()的区别说明

    require 的使用方法如 require("MyRequireFile.php"); .这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require ...

随机推荐

  1. 实现tableview的下拉刷新

    实现tableview的下拉刷新 推荐第三方下拉刷新代码http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6 ...

  2. could not insert new action connection could not find any information for the class named

    玩代码的时候遇到一问题,用的 storyboard 的时候分页不能自动获取到类,Automatic 里是空的,然后自动选到该类下的时候控件貌似可以拖过去,但是当 cennect 的时候会报错:“cou ...

  3. Tcl

    Tcl(发音 tickle)是一种脚本语言.由John Ousterhout创建.TCL经常被用于快速原型开发 RAD.脚本编程.GUI编程和测试等方面. Expect Expect是 另外一种非常流 ...

  4. 51nod1130(斯特林近似)

    题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1130 题意: 中文题诶~ 思路: 直接斯特林公式就好了~ ...

  5. hive 普通创建表和跟新列操作

    创建表 CREATE TABLE if not exists student ( student_id int, sex int, address String, email String ) 这里需 ...

  6. c语言中->(间接成员运算符)的含义

    写于2016年12月12日. "->"称为间接成员运算符. 总体注解:这个运算符与指向结构(sturct)或联合(union)的指针一起使用,用来指明结构或联合的的成员.假设 ...

  7. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

  8. Sql常用语法以及名词解释

    Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...

  9. Google之Chromium浏览器源码学习——base公共通用库(三)

    本节将介绍base公共通用库中的containers,其包含堆栈.列表.集合.以及Most Recently Used cache(最近使用缓存模板). linked_list.h:一个简单的列表类型 ...

  10. Ring3下的DLL注入(NtCreateThreadEx + LdrLoadDll方式实现,可以注入系统进程)

    工具介绍及使用请移步:http://blog.csdn.net/sunflover454/article/details/50441014 本文首发在零日安全论坛:http://www.jmpoep. ...