18

我一直在互联网上试图找出处理我网站中路径的最佳方法。我应该使用相对路径还是绝对路径?

我已经多次看到 dirname ( FILE ) 被提及。相对路径的一个问题是,不同目录级别的其他几个文件包含的 PHP 文件会导致相对路径中断。例如,如果目录结构是

Root
    A
    B
       b

b 和 An 中的 PHP 文件包含 B 中的另一个文件,那么 B 中文件中代码的相对路径将不同。

所以一般来说,关于代码中的包含和文件操作,处理文件路径的最佳方法是什么。

4

5 回答 5

15

虽然有很多方法可以找到路径,但我总是发现在项目根目录的文件中定义一个常量index.phpconfig排序是最容易的。然后我可以SITE_ROOT用于包含/类加载器等,以及SITE_URL视图、控制器、重定向等。

<?php
$root=pathinfo($_SERVER['SCRIPT_FILENAME']);
define ('BASE_FOLDER', basename($root['dirname']));
define ('SITE_ROOT',    realpath(dirname(__FILE__)));
define ('SITE_URL',    'http://'.$_SERVER['HTTP_HOST'].'/'.BASE_FOLDER);
?>

基础类自动加载器

<?php
function __autoload($class_name) {
    include (SITE_ROOT.'/includes/'.$class_name.'.php');
}
$obj  = new MyClass1();
$obj2 = new MyClass2(); 
?>
于 2012-05-03T04:30:07.370 回答
0

Zend 框架对优化包含路径有一些很好的指导:

http://framework.zend.com/manual/1.10/en/performance.classloading.html

即使您不使用 Zend 框架,这些都是很好的指示。一般的要点是:

  • 使用绝对路径
  • 减少您定义的包含路径的数量
  • 最后定义当前目录,或者根本不定义
  • 尽早定义您的 Zend Framework include_path(如果您不使用 Zend,则不真正相关)
于 2012-05-03T05:45:00.177 回答
0

为文件的目录结构、PHP 文件和类名使用正确命名约定以及设计自动加载器以包含文件的最佳方式

于 2012-05-03T04:15:48.333 回答
0

您可以将所有包含文件放在一个主目录中。然后在配置文件或脚本本身中创建一个指向包含目录的路径变量。

于 2012-05-03T04:14:45.600 回答
-1

新版本的 php (PHP5.3) 可以使用__autoload 所以,你只需要确定你的应用程序的根。

于 2012-05-03T04:15:26.303 回答