【问题标题】:PHP require_once not working: no such file in directoryPHP require_once 不起作用:目录中没有这样的文件
【发布时间】:2018-05-05 08:33:48
【问题描述】:

在使用 PHPUnit 测试应用程序时,我遇到了路径问题。我有一个名为UserControllerTest的测试:

<?php
require_once __DIR__ . "/../../Controllers/UserController.php";

class UserControllerTest extends \PHPUnit_Framework_TestCase {
    private $controller;

    protected function setUp() {
        $this->controller = new UserController();
    }

    public function testThatCanGeneratePromoCode() {
        $promoCode = $this->controller->generatePromoCode();

        $this->assertEquals(20, strlen($promoCode));
    }
}

这是在测试UserController 类:

<?php

require_once "../config/DbConnection.php";
require_once "../Model/ConsumerModel.php";
require_once "../Managers/UtilManager.php";

class UserController {

    private $dbh;
    private $utilManager;
    private $model;

    /**
     * UserController constructor.
     * @param null|ConsumerModel $model
     * @internal param $dbh
     */
    public function __construct(ConsumerModel $model = null) {
        $this->dbh = new DbConnection();
        $this->utilManager = new UtilManager();
        $this->model = $model;
    }

    public function generatePromoCode() {
        $length = 20;
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }
}

我在运行测试时不断收到此错误: PHP Warning: require_once(../config/DbConnection.php): failed to open stream: No such file or directory in C:\Users\MrDan\Documents\code\twinportrait-api\Controllers\UserController.php on line 3

但是,如果我将require_once __DIR__ . 用于UserController 类中的所有必需文件,则测试有效。但是 Heroku 上的部署失败并抛出 500 status code。有关如何解决此问题的任何建议?

这是我的项目结构:

【问题讨论】:

  • 脚本执行所在的文件夹不一定是脚本文件所在的位置....您在测试文件夹中执行测试,因此相对路径将相对于测试文件夹, 而不是 UserController 文件所在的文件夹
  • @MarkBaker 好的,我明白,但有什么解决方案?
  • 见下文@DanielOMensah
  • 首先查看 heroku 上的日志,看看是什么导致了 500 错误

标签: php heroku phpunit


【解决方案1】:

你需要弄清楚你必须从什么路径开始。首先

var_dump( realpath( __DIR__ . '/../..' ) );

这将显示您尝试导航到的父目录。然后更正从那里到config/DbConnection.php 的路径。

__DIR__ 魔术常量为您提供与其所在文件相同的目录。realpath 将在无效路径上返回 false。如果上面返回false,则意味着您的网络服务器用户没有访问该文件夹的目录权限,因为在您的情况下肯定存在下两级的文件夹。如果是这种情况,您需要 chmod 配置文件夹。否则你的路径字符串是关闭的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-27
    • 2013-08-29
    • 2020-09-25
    • 2016-07-24
    • 1970-01-01
    • 2011-07-04
    • 2017-06-16
    • 1970-01-01
    相关资源
    最近更新 更多