PHP中的预定义常量__FILE__

      在手册里是这样介绍__FILE__的:
      文件的完整路径和文件名。如果用在 包含文件中,则返回包含文件名。自 PHP 4.0.2 起, __FILE__ 总是包含一个 绝对路径,而在此之前的版本有时会包含一个相对路径。
      如果不注意这段话的话,肯定会有些人会说
$_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']和__FILE__是一样的,因为都是得到当前文件的路径,这在一些方面是没有错的,但是当本页被其他页面include的话,就完全不一样了。
      比如:
 include.php(此页面在e:/libs/includes/下)
<?PHP
$dir1 = __FILE__;
$dir1 = str_replace("\\",'/',$dir1);
$dir2 = $_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF'];
$dir2 = str_replace("\\",'/',$dir2);
echo $dir1;
echo '<br />';
echo $dir2;
?>
 
 test.php(此页面在e:/test/下)
<?PHP
include('../libs/includes/include.php');
?>
 
运行test.php,输出如下:
 test.php运行结果
E:/libs/includes/include.php
E:/test/test.php
由此正可以证明手册所说的。
      这个事情说的挺小,其实很多人都没有注意到,而在smarty的初始化中我们正可以利用__FILE__初始化各文件夹的路径,如下
 new_smarty.php
<?php
include_once('Smarty.class.php');
class new_smarty extends Smarty
{
 /**
  * (功能描述)
  * @Date:
  * @param    (类型)     (参数名)    (描述)
  */
 function new_smarty(){
  $this->smarty;
  
  $dir = dirname(__FILE__);
  $dir = str_replace("\\",'/',$dir);
  
  $this->template_dir = "$dir/templates";
  $this->compile_dir  = "$dir/templates_c";
  $this->cache_dir    = "$dir/cache";
  $this->config_dir   = "$dir/configs";
  
  $this->cacheing = true;
  
  $this->left_delimiter  =  '{%';
  $this->right_delimiter  =  '%}';
 } 
}
?>
 

你可能感兴趣的:(职场,休闲,手册)