我在Windows上使用PHP,几天了。我被指示的所有时间包括以下方式:
在index.php文件中:
require ('include/init.inc');
在“include”目录中,我说:
在init.inc文件中:
require ("workbench.inc");
但突然间不再有效。有一次我还必须在“init.inc”中指定目录。 为什么一直都在工作,突然间没有了?
答案 0 :(得分:2)
根据给定的文件路径包含文件,如果没有给出,则包含 指定的include_path。如果文件中没有找到 include_path,include将最终签入调用脚本自己的 目录和失败前的当前工作目录
因此,current working directory(CWD)在包含其他文件时非常重要。它可以由getcwd()
检索。
如果您的目录结构如下所示
rootdir/
include/
init.rc
workbench.rc
index.php
然后require('include/init.rc')
仅在rootdir/
是CWD或是搜索路径的一部分时才有效。同样,require('init.inc')
假设CWD为rootdir/include/
。由于当前工作目录可以更改,因此在PHP中使用更健壮的
// in index.php
require(__DIR__ . '/include/init.rc');
// in workbench.rc
require(__DIR__ . '/init.rc');
然后require
将独立于CWD工作。这是有效的,因为magic constant __DIR__
被包含没有尾随目录分隔符的常量的文件的绝对路径所取代,例如
index.php
,__DIR__
为D:\path\to\rootdir
和include/init.rc
,__DIR__
为D:\path\to\rootdir\include
。