免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 12879 | 回复: 9
打印 上一主题 下一主题

请教require_once(dirname(__FILE__)."/config.php") [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-24 19:00 |只看该作者 |倒序浏览
dedecms里的dede文件夹里有个index.php里面有如下这个代码,望有人给详细说明下.
<?php
require_once(dirname(__FILE__)."/config.php");
?>
和<?php
require_once("./config.php");
?>
这两个有什么不同?
__FILE__上面的这个常量指的是哪个文件?

论坛徽章:
0
2 [报告]
发表于 2007-06-24 19:38 |只看该作者
index.php

论坛徽章:
0
3 [报告]
发表于 2007-06-24 19:50 |只看该作者
__FILE__, The full path and filename of the file. If used inside an include, the name of the included file is returned. Since PHP 4.0.2, __FILE__ always contains an absolute path whereas in older versions it contained relative path under some circumstances.

dirname -- Returns directory name component of path

呵呵, 不过, 在我看来, 楼主说的两个方法, 也就是require_once(dirname(__FILE__)."/config.php");与require_once("./config.php");是一样的, 没什么不一样.

论坛徽章:
0
4 [报告]
发表于 2007-06-24 20:09 |只看该作者
http://www.phpchina.com/manual/p ... nts.predefined.html
PHP 的“魔术常量”__FILE__
文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
手册上说的是用在在包含文件中,则返回包含文件名。那require_once(dirname(__FILE__)."/config.php");这里返回的   _FILE_    是哪个文件名???

[ 本帖最后由 w3g8 于 2007-6-24 20:13 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-06-24 20:13 |只看该作者
require_once(dirname(__FILE__)."/config.php");与require_once("./config.php");是一样的. 但前者比后者有什么好处呀???

论坛徽章:
0
6 [报告]
发表于 2007-06-24 20:32 |只看该作者
在baidu里搜的http://hi.baidu.com/jimtao/blog/ ... 7e2e18377abe55.html
今天碰到了PHP的常量__FILE__的问题了。
在网上查了一下。总结了以下规律。
dirname(__FILE___) 函数返回的是脚本所在在的路径。
比如文件 b.php 包含如下内容:
<?php
$basedir = dirname(__FILE__);
?>
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。
变量$basedir 的内容还是b.php所在的那个文件夹的路径。
而不是变成a.php文件所在的目录。dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。
不会返回当前的文件名称。
dirname(__FILE__) 也可能返回一个 . (当前目录)
[原因是 b.php 文件在 http.conf 或者 PHP 配置开发环境的默认WEB目录下.
比如 WEB_ROOT 为: "C:/root/www/".]
b.php文件路径为: "C:/root/www/b.php". 使用方法提示, 如果重复一次可以把目录往上提升一个层次:
比如:$d = dirname(dirname(__FILE__));
其实就是把一个目录给dirname()做参数了.因为dirname()返回最后的目录不带\\或者是/
所以重复使用的时候可以认为 dirname() 把最下层的目录当成文件名来处理了.照常返回
当前目录的上级目录.这样重复就得到了它的上一级的目录. 包含得到上一级目录的文件include(dirname(__FILE__).'/../filename.php');

include(dirname(__FILE__).'/../filename.php');这里返回的是上一级目录的文件????这里的(__FILE__)指的是filename.php??????

论坛徽章:
0
7 [报告]
发表于 2007-06-24 21:22 |只看该作者
原帖由 w3g8 于 2007-6-24 20:32 发表
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。
变量$basedir 的内容还是b.php所在的那个文件夹的路径。
而不是变成a.php文件所在的目录。dirname(__FILE__) 一般会返回文件所的当前目录到系统根目录的一个目录结构。
不会返回当前的文件名称。



有趣啊,
如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。

<?php
require_once("./c.php"); //实际上调用的是a.php目录下的c.php
require_once(dirname(__FILE__)."/c.php"); //实际上调用的是b.php目录下的c.php
?>

论坛徽章:
0
8 [报告]
发表于 2007-06-24 21:54 |只看该作者
dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的。

论坛徽章:
0
9 [报告]
发表于 2007-06-24 22:31 |只看该作者
<?php
//如果b.php被其他目录里的a.php文件require 或者 include 去引用的话。
require_once("./c.php"); //实际上调用的是a.php目录下的c.php
require_once(dirname(__FILE__)."/c.php"); //实际上调用的是b.php目录下的c.php
require_once("c.php"); //实际上调用的是b.php目录下的c.php
?>

论坛徽章:
0
10 [报告]
发表于 2007-06-25 09:12 |只看该作者
8楼正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP