官网对include加载路径的解释如下:首先根据参数给的路径查找被包含的文件,如果没有给目录(只有文件name),则根据include_path指定目录查找。如果在include_path下没有找到该文件,include会在调用脚本文件所在目录和当前工作目录中查找。如果最后没有找到文件,include结构会发出警告;这与require不同,require会发出致命错误。include_path这是一个需要在php.ini中设置的值。一般情况下,我们不会轻易设置脚本文件所在的目录。顾名思义就是当前php文件所在目录的路径。当前工作目录的取值让人迷惑,因为这个所谓的当前工作目录路径,其实跟文件是否被包含有关!这一点在框架中更容易被混淆和忽略!例子显示文件目录结构如下:-require--app---application.php---db.php--index.php--db2.phpindex.php127.0.0.1[username]=>root[password]=>root)Array([host]=>127.0.0.1[username]=>root2[password]=>root2)__FILE__:E:\dongchao\projects\test\php\require\app\application.php__DIR__:E:\dongchao\projects\test\php\require\appWorkingDir:E:\dongchao\projects\test\php\require官网有说明,include会尝试查找当前脚本所在目录和当前工作目录下是否存在该文件。db.php所在目录为当前脚本目录,当前工作目录为index.php所在目录。如果把这个看做是框架目录结构,那么当前工作目录其实就是框架入口文件所在的目录。getcwd函数可以得到当前工作目录路径,得出结论:为了不造成混淆,提高代码可读性,建议导入文件时使用绝对路径!使用绝对路径也可以避免include函数冗余的两次查找(从当前脚本所在目录和当前工作目录开始查找),所以使用绝对路径可以提高执行效率!
