【问题标题】:Requiring file on destruct销毁时需要文件
【发布时间】:2011-11-08 20:07:10
【问题描述】:

我有课并这样做:

function __destruct() {
    $this->load_file('epicEndingfile.php');
}

我得到一个错误: Warning: require(...) [function.require]: failed to open stream: No such file or directory

当我对__construct 执行相同操作时,它会起作用。这是为什么呢?

编辑:我实际上不需要文件,但我使用方法来做到这一点。

【问题讨论】:

  • 你的 get_include_path 返回什么?当您需要文件时,我建议使用像 /path/to/files/ 这样的完整路径。

标签: php oop destructor


【解决方案1】:

require 使用您的 CD(当前目录),而不是您放置文件的目录。

它可能会在您的应用程序上下文中发生变化(在构造和破坏之间), 如果您想根据当前文件提供相对文件路径,请使用:

require dirname(__FILE__)."/epicEndingfile.php";

PHP 5.2 及以下版本

require __DIR__."/epicEndingfile.php";

在 PHP 5.3+ 上

【讨论】:

    【解决方案2】:

    您需要计算文件的位置。按照您编写的方式,该文件必须与调用该函数的文件存在于同一目录中。添加完整路径,它应该可以工作。

    require '/full/path/to/file/epicEndingfile.php';
    

    【讨论】:

    • 别忘了开头的/
    • 为什么我必须在这里显示完整路径,但我不需要它在__construct中做?顺便说一句,我仍然得到一个错误。
    • 糟糕!好点子。否则它是相对于代码正在执行的位置。
    • 您正在执行 __construct 的位置可能与您尝试包含的文件位于同一目录中。
    【解决方案3】:

    在 __destruct 方法中,首先执行echo getcwd();,您将看到当前工作目录在那个阶段,确定它在那个时候被改变了。

    例如,如果您的类被定义在与您的主脚本不同的目录中的文件中,则 require 将相对于类定义文件。

    始终定义一个包含脚本基本目录的常量是一个好主意。 所以在你的主 php 文件的第一行的某处,添加一个。

    define('rootdir', dirname(__FILE__));
    // you can replace dirname(__FILE__) with __DIR__ if it works in you PHP Version.
    

    然后每次你对一个相对于你的主脚本文件的文件进行包含或要求。

    include rootdir. '/requires/include.php';
    

    例如。

    【讨论】:

    • @AbiusX 你为什么要重新定义它?
    猜你喜欢
    • 2020-08-31
    • 2011-10-09
    • 2016-07-16
    • 1970-01-01
    • 2021-06-05
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多