我有以下目录结构。
public_html
|----------app1
| |---------config.php
| |---------index.php
|
|----------app2
|---------import.php
APP1 / config.php中
define('ABC', 'hello');
APP1 / index.php的
require_once 'config.php';
echo ABC;
调用app1/index.php
打印:
您好
APP2 / import.php
require_once('../app1/index.php');
调用app2/import.php
打印:
注意:使用未定义的常量ABC - 假设' ABC'在第10行的/abs/path/public_html/app1/index.php中(行回显ABC)
ABC
为什么会这样?
如何使其正常运作?
答案 0 :(得分:2)
您应该阅读documentation about include
and require
。相对路径始终相对于第一个调用脚本进行解析。
因此,当您致电app1/index.php
时,require_once('config.php')
会加载app1/index.php
,但当您致电app2/import.php
时,require_once('config.php')
会尝试加载不存在的 app2/config.php
。
建议1 :在编码时提高你error reporting level,你会得到更多关于错误的线索。在这种情况下,include
至少通知一次。
建议2 :如果没有充分理由,请避免使用include
,使用require_once
,如果无法加载文件,则会出现致命错误。
答案 1 :(得分:2)
使用
require_once __DIR__ . '/config.php';
而不是require_once 'config.php';
答案 2 :(得分:1)
问题是您从文件夹php app2/import.php
运行脚本public_html
而不是public_html/app2
。
如果你这样做:
cd app2 && php import.php
一切都会奏效!
require_once 'config.php';
中app1/index.php
的示例有效,因为文件index.php
和config.php
位于同一目录中。
但app2/import.php
放在app1/config.php
的另一个目录中,因此在这种情况下你不能使用这种方法。
有目的地避免使用相对路径的混乱,你必须在__DIR__
的路径中使用常量import.php
,如下所示:
<?php
require_once(__DIR__ . '/../app1/index.php');
现在您可以从public_html
目录运行此脚本。