-1

我在相对包含文件方面遇到了一些问题。问题不在于 require_once 找不到文件,而是它可以在没有文件的地方找到文件。我已将问题简化为三个小班。

所以这是我的目录结构:

public_html/
    index.php
    commands/
        CommandFactory.php
        account/
            Status.php

索引.php:

require_once 'commands/CommandFactory.php';

$factory = new CommandFactory();

命令工厂.php:

    class CommandFactory{

    public function __construct()
    {
        echo getcwd() . '<br/>'; //xxx\public_html (which is good, this is where index.php is
        //require_once 'account/Status.php'; // This works as expected
        require_once 'account/Status.php'; // This ALSO works, but it shouldn't

        $status = new Status(); // This works, though it shouldn't. 
    }
}

我已经通过将 CommandFactory 移动到不同的目录进行了测试,从而解决了问题。但是,我不明白为什么可以包含该文件。它不应该包括相对于 CommandFactory 的 Status,它应该是相对于 index.php 的。我添加了当前的工作目录,看看出了什么问题,但我无法弄清楚。有人知道这是如何以及为什么起作用的吗?

4

1 回答 1

1

从 php.net 网站:

根据给定的文件路径包含文件,如果没有给出,则根据指定的 include_path 包含文件。如果在 include_path 中找不到该文件,则 include 最终会在失败之前检查调用脚本自己的目录和当前工作目录。如果找不到文件,include 构造将发出警告;这是与 require 不同的行为,它将发出致命错误

资源

于 2014-12-14T16:32:20.313 回答