我在互联网上搜索了很多,想找到处理网站路径的最佳方法。应该使用相对路径、绝对路径还是其他方式?
我看到有人几次提到dirname (FILE)。 相对路径存在一个问题,就是被多个文件在不同目录级别中包含的PHP文件会导致相对路径失效。例如,如果目录结构是:
Root
A
B
b
如果一个 PHP 文件在 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();
?>
include(SITE_ROOT.'/config.php')
,无论您调用该包含多深,它始终指向同一文件。当调用类时,__autoload
仅起作用,它可以节省为每个类执行 include (SITE_ROOT.'/includes/'.$class_name.'.php');
的时间,对于 MVC 模式中的模型非常有用,因为控制器通常从路由器/前端控制器类中调用。 - Lawrence Cherone在目录结构、PHP文件和类名方面使用适当的命名约定,并设计一个自动加载器来包含文件,是使用最佳实践的方式。
Zend框架提供了一些关于优化包含路径的好建议:
http://framework.zend.com/manual/1.10/en/performance.classloading.html
即使您不使用Zend框架,这些都是很好的指针。一般的要点如下: