为什么我会在include或include_once语句中使用dirname(__ FILE__)?
我看过这个:
<?php include( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my_file.php'); ?> 为什么我需要这样做? 为什么我会去麻烦获取dirname,然后连接到一个目录分隔符和一个新的文件名?
上面的代码是不是等同于这个:
 <?php include( 'my_file.php' ); ?> 
??
PHP文档说,
包含的文件基于给定的文件path,如果没有给出,则指定include_path。 如果在include_path中找不到该文件, include()将最终在调用脚本自己的目录和当前工作目录中检查失败之前。 如果include()构造找不到文件,将会发出警告; 这是与require()不同的行为,它会发出致命的错误。
假设我有一个(假的)目录结构,如:
 .../root/ /app bootstrap.php /scripts something/ somescript.php /public index.php 
 现在假定bootstrap.php包含一些代码,用于设置数据库连接或其他types的增强function。 
 假设你想在boostrap.php文件夹中包含一个名为init.php的文件。 现在,为了避免使用include 'init.php'扫描整个包含path,可以使用include './init.php' 。 
 虽然有一个问题。 那个./将和包含bootstrap.php的脚本相关,而不是bootstrap.php 。  (从技术上讲,这将是相对于工作目录。) 
  dirname(__FILE__)允许您获取绝对path(从而避免包含pathsearch),而不依赖于工作目录是bootstrap.php所在的目录。 
  (注意:从PHP 5.3开始,可以使用__DIR__来代替dirname(__FILE__) 。) 
 现在,为什么不使用'init.php';  ? 
 尽pipe起初很奇怪,但是. 不能保证在包含path中。 有时候为了避免无用的stat()的人把它从包含path中移除,当它们很less包含在同一个目录中的时候(为什么当你知道包含的时候search当前目录永远不会在那里? 
注意:这个答案的大约一半是在一个相当老的post中的地址: 什么是更好的要求(dirname(__ FILE __)。'/'。'myParent.php')而不仅仅是要求('myParent.php')?
如果您希望代码在具有不同环境的多个服务器上运行,则需要在include或include_once语句中使用dirname( FILE )。 原因如下。 1.不要给你的服务器包含文件的绝对path。 2.像绝对path一样dynamic计算完整path。
使用dirname( FILE )和后续调用的组合,直到到达“/myfile.php”的起始位置。 然后将包含该path的variables附加到包含的文件中。
我在下面使用这个,如果这是你在想什么。 它对我来说效果很好。
 <?php include $_SERVER['DOCUMENT_ROOT']."/head_lib.php"; ?> 
我想要做的是从根文件夹中调用/ head_lib.php pulla文件。 它不会拉任何东西来build立网页。 子目录中的页眉,页脚和其他主要function将永远不会显示出来。 直到我做了上面,它像一个冠军。