我有一个像下面这样的目录结构;
script.php的
inc/include1.php
inc/include2.php对象/ object1.php
对象/ object2.phpSOAP/soap.php
现在,我使用这些对象均script.php
和/soap/soap.php
,我可以移动它们,但我想对于一个具体的理由类似的目录结构.当执行script.php
包含路径inc/include.php
时,执行/soap/soap.php
它时../inc
,绝对路径有效,/mnt/webdev/[project name]/inc/include1.php...
但如果我想将目录移动到其他位置,这是一个丑陋的解决方案.
那么有没有办法使用相对路径,或者一种方式来编程生成"/mnt/webdev/[project name]/"
?
Pet*_*ton 147
这应该工作
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
include "$root/inc/include1.php";
Run Code Online (Sandbox Code Playgroud)
编辑:通过aussieviking增加了改进
Kev*_*vin 43
您可以使用相对路径.试试__FILE__
.这是一个PHP常量,它总是返回它所在脚本的路径/文件名.所以soap.php
,你可以这样做:
include dirname(__FILE__).'/../inc/include.php';
Run Code Online (Sandbox Code Playgroud)
文件的完整路径和文件名.如果在include中使用,则返回包含文件的名称.从PHP 4.0.2开始,
__FILE__
始终包含已解析符号链接的绝对路径,而在旧版本中,它在某些情况下包含相对路径. (资源)
另一种解决方案是在httpd.conf或.htaccess文件中设置包含路径.
解决此问题的另一种方法完全不需要包含,那就是使用自动加载功能。包括脚本需要的所有内容“以防万一”可能会妨碍性能。如果包含的全部是类或接口定义,并且只想在需要时才加载它们,则可以__autoload()
使用自己的代码重载该函数以查找适当的类文件,并仅在调用它时加载它。这是手册中的示例:
function __autoload($class_name) {
require_once $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
Run Code Online (Sandbox Code Playgroud)
只要您相应地设置了include_path变量,就无需再包含类文件。