0

我有在 Debian Squeeze 上运行http://www.example.com/的文档。/home/www/example.com/www

/home/www/example.com/
    www/
         index.php
    php/
         include_me.php

在 php.ini 中,我取消注释并更改为:

include_path =".:/home/www/example.com"

在 www 的脚本 index.php 中,我有require_once("/php/include_me.php"). 我从 PHP 得到的输出是:

Warning: require_once(/php/include_me.php) [function.require-once]: failed to open stream: No such file or directory in /home/www/example.com/www/index.php on line 2

Fatal error: require_once() [function.require]: Failed opening required '/php/include_me.php' (include_path='.:/home/www/example.com') in /home/www/example.com/www/index.php on line 2

如您所见,包含路径根据错误设置正确。但如果我这样做require_once("../php/include_me.php");,它会起作用。因此,包含路径一定有问题。

有谁知道我能做些什么来修复它?

4

6 回答 6

7
php/

是相对路径,以当前目录为起点

./php/

是一个相对路径,并显式声明当前目录 ( . ) 作为起点

/php/

不是相对路径,意味着它的起点是顶级目录(根目录/

于 2012-06-07T15:56:42.123 回答
2

我同意 Mihai Stancu 的观点,但我想补充一点,包括使用 dirname(__FILE__) 可能是更好的做法,这样当目录移动时代码不会中断。这将充当绝对路径,但允许您将它们视为本地路径。

于 2012-06-07T15:59:29.923 回答
2

require_once("/php/include_me.php") 的解释:

您为“/home/www/example.com/”设置了包含路径,但这是/home/www 的子目录。您的 require_once 正在寻找 /php/include_me.php。

/
home/
    www/
        example.com/
              php/
              www/
php/
    include_me.php

您的 require 调用中有一个前面的 /,它正在寻找 /php/include_me.php。要查找 /home/www/example.com/php/include_me.php 你会想要:

require_once('php/include_me.php');

您还可以将包含路径设置为:

include_path =".:/home/www/example.com/:/home/www/example.com/www/:/home/www/example.com/php/"
于 2012-06-07T16:00:33.697 回答
2

从文档中include

如果定义了路径——无论是绝对路径(在 Windows 上以驱动器号或 \ 开头,或在 Unix/Linux 系统上以 / 开头)还是相对于当前目录(以 . 或 .. 开头)—— include_path 将被完全忽略。例如,如果文件名以 ../ 开头,解析器将在父目录中查找请求的文件。

由于您在这种情况下指定了绝对路径,因此include_path将忽略 。

于 2012-06-07T15:57:55.597 回答
1

你需要的开始斜线一次将从根搜索......尝试:

require_once('php/include_me.php');
于 2012-06-07T15:58:09.080 回答
1

这是试图在您的文件系统上的 /php 中获取文件,而不是您的 Web 目录。

require_once("/php/include_me.php");
于 2012-06-07T15:58:28.393 回答