PHP路径的最佳实践

PHP路径的最佳实践,php,path,twig,Php,Path,Twig,我一直在互联网上寻找处理网站路径的最佳方法。我应该使用相对路径还是绝对路径 我已经见过多次提到dirname(FILE)。我对相对路径的一个问题是,不同目录级别的其他几个文件包含的PHP文件会导致相对路径中断。例如,如果目录结构为 Root A B b b中的一个PHP文件和a包含b中的另一个文件,那么b中文件中代码的相对路径将不同 一般来说,处理代码中包含和文件操作的文件路径的最佳方法是什么。您可以将所有包含文件放在一个主目录中。然后在配置文件或脚本本身中创建一

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

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

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


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

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

可以使用新版本的php(PHP5.3)
因此,您只需确定应用程序的根。

为目录结构使用适当命名约定的最佳方法,PHP文件和文件的类名,并设计一个自动加载程序来包含文件。有很多方法可以找到路径,我总是发现在项目的根目录
index.PHP
config
上定义一个常量是最容易的。 然后我可以使用
SITE\u ROOT
作为包含/类加载程序等,使用
SITE\u 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(); 
?>

Zend框架提供了一些关于优化包含路径的好建议:

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

  • 使用绝对路径
  • 减少定义的包含路径的数量
  • 最后定义当前目录,或者根本不定义
  • 尽早定义您的Zend框架include_path(如果您不使用Zend,则不太相关)

这就是“最佳”的问题所在,它几乎总是主观的。自动加载是否递归地扫描目录路径,如果它这样做,似乎对性能不利。另外,自动加载似乎只适用于类,我的一些文件不是面向对象的,并且从那以后就被弃用了[7.2).你有创建和自动加载示例的好链接吗,我对php很陌生,还没有找到好的教程。谢谢,我读了这篇文章,但这似乎只适用于OO,我的一些文件不是OO,所以我猜这个方法不会起作用。这会起作用,但会破坏我的组织。我正试图将我的文件保持在一个合理的状态目录结构,因为有这么多。使用此方法,不是所有要使用自动加载程序的文件都需要包含配置文件。如果是这样,最好使用相对路径,如include(“../../config.php”);同样像我上面提到的,如果不是所有的文件都是OO,那么这会起作用吗定义索引文件中的常量,它只需要指向根目录,如果您的配置在根目录中,那么您需要做的就是
include(SITE_root./config.php'))
无论您调用包含的深度有多深,它都将始终指向同一个文件。
\uu自动加载
仅在调用类时有效,它在执行
include(SITE\u ROOT./includes/'.$class\u name..php'时保存)
对于每个类来说,MVC模式下的模型都非常方便,因为控制器通常是从路由器/前端控制器类调用的。我不太明白这是如何解决我的问题的。即使我的根目录中有这个配置级别,那么我的所有其他文件仍然需要使用相对路径包含它我要做的是,我有一个ErrorReporter类,它包含在我的所有其他文件中,这些文件位于目录结构的不同级别。在ErrorReporter类中,我有一些路径,但如果它们是相对的,它们就成为相对于任何包含ErrorReporter的类的,这意味着它们不是相对于每个位置的时间