2

我有以下文件结构:

temp
    main
        index.php
    a.php
    b.php

这是文件;

索引.php

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

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

echo "OK<br />"

一个.php

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

require('./b.php');

echo "a is here<br />"

b.php

echo "b is here<br />"

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

我注意到如果我改变

require('./b.php');

require('b.php');

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

4

2 回答 2

17

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

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

于 2010-10-20T07:06:34.633 回答
-2

利用require('..\a.php');

PHP 手册说对includeWindows 使用反斜杠。

编辑:

哎呀。我误读了代码。无视这个答案。

于 2010-10-20T06:30:12.020 回答