PHP 路径的最佳实践


Best practice for PHP paths

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

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

Root
    A
    B
       b

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

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

有很多方法可以找到路径 我总是发现在项目index.php根目录的文件或某种config中定义常量是最容易的。然后我可以将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(); 
?>

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

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

的最佳方式

Zend框架有一些关于优化包含路径的很好的指针:

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

即使你没有使用Zend框架,这些都是很好的指针。一般要点是:

  • 使用绝对路径
  • 减少定义的包含路径数
  • 最后定义当前目录
  • ,或者根本不定义当前目录
  • 尽早
  • 定义你的 Zend 框架include_path(如果你不使用 Zend,就不真正相关)
新版本

的php(PHP5.3)可以使用__autoload因此,您只需要确定应用程序的根目录。