为什么PHP"require"找不到文件?

Mis*_*hko 2 php require include include-path

我有以下文件结构:

temp
    main
        index.php
    a.php
    b.php
Run Code Online (Sandbox Code Playgroud)

这是文件;

的index.php

echo "index.php ---> " . __DIR__ . "<br />";

require('../a.php');

echo "OK<br />"
Run Code Online (Sandbox Code Playgroud)

a.php只会

echo "a.php ---> " . __DIR__ . "<br />";

require('./b.php');

echo "a is here<br />"
Run Code Online (Sandbox Code Playgroud)

b.php

echo "b is here<br />"
Run Code Online (Sandbox Code Playgroud)

index.php调用时我收到以下错误:

index.php ---> D:\Programs\WampServer 2\www\temp\main
a.php ---> D:\Programs\WampServer 2\www\temp

Warning: require(./b.php) [function.require]: failed to open stream: No such file or directory in D:\Programs\WampServer 2\www\temp\a.php on line 5

Fatal error: require() [function.require]: Failed opening required './b.php' (include_path='.;C:\php5\pear') in D:\Programs\WampServer 2\www\temp\a.php on line 5
Run Code Online (Sandbox Code Playgroud)

我注意到如果我改变了

require('./b.php');
Run Code Online (Sandbox Code Playgroud)

require('b.php');
Run Code Online (Sandbox Code Playgroud)

这是为什么 ?它按预期工作.

Sta*_*ers 14

当您使用include或require时,您包含的文件将表现为包含它的脚本的一部分.在这种情况下,文件a.php可能与同一目录存在b.php,但是当代码运行时,它正在上下文中运行index.php.如果您使用__FILE__而不是__DIR__,则会看到a.php返回与index.php作为包含文件运行时相同的值index.php.

由于相对路径根据文件的使用位置而变化,因此最好使用相对于服务器根目录的绝对路径.如果正常配置了计算机,那将首先配置$_SERVER["DOCUMENT_ROOT"],然后添加应用程序路径和包含路径.在某些共享主机服务器上,您可能必须在某处对根进行硬编码(或将其添加到.htaccess文件中).