PHPIN.NET

 找回密码
 立即注册
查看: 5489|回复: 0

[高级进阶] PHP相对目录问题

[复制链接]

469

主题

31

回帖

5497

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5497
发表于 2014-10-18 16:46:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
PHP相对目录问题
在PHP中处理目录包含的时候有时候会遇到一些意想不到的情况,如下面的例子: 目录结构: 相关代码
  1. // 目录1下的a.php代码

  2. <?php     
  3.     header("Content-Type:text/html;charset=UTF-8");
  4.     require_once'../b.php';     
  5.     echo "这里是a";
  6. ?>

  7. //php_test根目录下的b.php代码,想调用和他同目录的c.php

  8. <?php     
  9.     require_once'c.php';
  10.     echo "这里是a上一级的b";
  11. ?>

  12. //php_test根目录下的c.php代码

  13. <?php     
  14.     echo "这里是和b同一目录的c";
  15. ?>

  16. //目录1下的c.php代码

  17. <?php
  18.     echo '这是和a同目录的c';  
  19. ?>

  20. //结果如下

  21. 这是和a同目录的c
  22. 这里是a上一级的b
  23. 这里是a
复制代码
在b.php中我们明明是调用的和b同目录的c.php,但是结果竟然是调用的和a.php同目录的c.php。这是为什么呢。 原来php中相对路径是以当前工作目录为基准的,并非以当前处理文件目录为基准。这里的工作目录就是指,最开始调用的文件目录,当前目录指执行到的文件。 为了防止和我们的预期产生偏差,我们可以采用指定相对目录的方法。 这里介绍一个函数:
string dirname(string path)
给出一个包含有文件全路径的字符串,返回一个去掉文件名的目录名。 (注意以下两种结果最后面有没有目录分隔符)

  1. //先将一个文件dirname.php

  2. <?php   
  3.     header("Content-Type:text/html;charset=UTF-8");
  4.     $path = '/data/www/index.php';
  5.     echo dirname($path);
  6.     echo '';
  7.     echo dirname('c:/a/b.php');
  8.     echo '';
  9.     echo dirname('c:/');
  10. ?>

  11. //结果如下

  12. /data/www
  13. c:/a
  14. c:\
复制代码

以上结果不得不提一下,Windows和类UNIX系统中目录分隔符的使用,类UNIX系统的目录分隔符统一使用/,而Windows系统中/和\都可以。为了提高可移植性,我们最好统一采用/作为分隔符,PHP也有一个自适应常数DIRECTORY_SEPARATOR来代替目录分隔符,但是个人觉得太长比较麻烦哈。 好了,下面我们来更改a.php和b.php中引入文件部分的代码:
  1. //目录1下的a.php代码

  2. <?php     
  3.     header("Content-Type:text/html;charset=UTF-8");     
  4.     require_once dirname(__file__).'/../b.php';     
  5.     echo "这里是a";
  6. ?>

  7. //php_test根目录下的b.php代码

  8. <?php     
  9.     require_once dirname(__file__).'/c.php';     
  10.     echo "这里是a上一级的b";
  11. ?>

  12. //php_test根目录下的c.php代码

  13. <?php     
  14.     echo "这里是和b同一目录的c";  
  15. ?>

  16. //结果如下

  17. 这里是和b同一目录的c
  18. 这里是a上一级的b
  19. 这里是a
复制代码
这下就是我们所要的结果啦!
注意:
关注一下文件名前的目录分隔符!

参见资料
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|PHPIN.NET ( 冀ICP备12000898号-14 )|网站地图

GMT+8, 2024-3-28 20:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表