【问题标题】:require_once not working as I expect it to [duplicate]require_once 没有像我预期的那样工作[重复]
【发布时间】:2013-01-03 08:58:41
【问题描述】:

可能重复:
relative path in require_once doesn’t work

我有一个这样的项目结构:

ProjectName/
   src
     test
       TestClass.php
   tests
     TestTestClass.php

当我尝试对 tests/TestTestClass.php 执行 require_once '/ProjectName/src/test/TestClass.php'; 时,我从 PHP 中收到一条错误消息,指出:没有这样的文件或目录。

我已经检查了拼写,我已经检查了所有内容。我不能给它完整的/home/userName/bla/bla 路径,因为我需要把它交给其他人。

有什么想法吗?

【问题讨论】:

  • 您使用的是绝对路径。 /ProjectName 在你的绝对根目录中吗?
  • 您是否尝试过使用相对路径?例如require_once '../src/test/TestClass.php'

标签: php phpunit require-once


【解决方案1】:

您将从为您的项目创建一个路径常量中受益。使用 __FILE__ 常量和 dirname() 很容易做到这一点。

define('ROOT_PATH', dirname(__FILE__));

以上内容可以放在配置文件中,以便在整个项目中包含文件。

require_once ROOT_PATH . '/src/test/TestClass.php';

我还建议查看autoloader

【讨论】:

    【解决方案2】:

    使用特殊的DIR来获取脚本的当前路径,这样更容易找到脚本路径:

    require_once(__DIR__ . '../folder/whatever.php');
    

    【讨论】:

      【解决方案3】:

      这是预期的行为。当你执行TestTestClass.php时,你的工作目录设置为ProjectName/tests

      最好使用../src/test/TestClass.php

      您的路径实际上是绝对的,因此您将直接从/ 开始工作,这不是您所期望的。如果您的include_path 设置为服务器的根目录,那么您的代码将在没有第一个/ 的情况下运行。如果您不希望依赖include_path 或任意级别(使用..),您始终可以在第一个文件中设置一个环境变量来定义应用程序根目录的完整路径,然后将其用于所有包含。

      例如/ProjectName/index.php:

      define('APPPATH', __DIR__);
      

      .. 在/ProjectName/tests/TestTestClass.php:

      require_once APPPATH . '/src/test/TestClass.php';
      

      【讨论】:

      • require_once 不是函数,因此不需要括号。
      • @JasonMcCreary 这就是为什么它没有。
      • @JasonMcCreary 也遗漏了一些实质性的东西,我写了然后修复;)
      • 这个计划不起作用,因为在运行 php 单元测试时从未见过、运行或理解索引。 ../path/to/file.php 是如何工作的
      • @Adam index.php 只是一个示例文件名,它也可以包含在 config.php 中。您可以简单地使用我第一次解释的相对路径,如果它是孤立的,则效果相同。
      【解决方案4】:

      传递给 require/include/require_once/include_once 的绝对文件路径都从文件系统根目录工作,而不是到网络服务器根目录

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-19
        • 2013-04-11
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        • 2023-01-01
        相关资源
        最近更新 更多