繁体   English   中英

PHP require_once无法正常工作:目录中没有此类文件

[英]PHP require_once not working: no such file in directory

使用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 关于如何解决此问题的任何建议?

这是我的项目结构:

资料夹结构

您需要弄清楚必须开始的路径。 第一

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

这将显示您要导航到的父目录。 然后从此处更正config/DbConnection.php的路径。

__DIR__魔术不断给你的文件它存在于生活在同一目录下。 realpath将返回false无效的路径上。 如果上述返回false ,则意味着您的网络服务器用户没有访问该文件夹的目录权限,因为在您的情况下,肯定应存在两个级别以下的文件夹。 如果是这种情况,则需要chmod config文件夹。 否则,您的路径字符串将关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM