【问题标题】:Problem with autoloader in deploying php website to heroku将php网站部署到heroku时出现自动加载器问题
【发布时间】:2020-06-09 02:06:32
【问题描述】:

当我的 php 代码部署到 heroku 时,我的自动加载器功能无法正常工作。我正在使用命名空间。

File structure

Heroku log

它在本地主机中正常工作。我已经对从 localhost 转换为 heroku 的路径进行了必要的更改,因为 heroku 使用 /app 作为文档根目录。因此,在下面的例子中,BASEURL 设置为:

define('BASEURL', $_SERVER['DOCUMENT_ROOT']); 

这是初始化文件的一部分:

spl_autoload_register('myAutoLoaderPerson');

function myAutoLoaderPerson($className) {
    $path = BASEURL . '/classes/';      
    $extension = '.class.php';
    $fullPath = $path . $className . $extension;        

    require $fullPath;
}

我做错了什么?

【问题讨论】:

    标签: php class heroku autoloader


    【解决方案1】:

    您确定$_SERVER['DOCUMENT_ROOT']) 填写正确吗?

    我宁愿建议使用一些相对定义来定义 BASEURL,例如,如果 Document Root 是定义 BASEURL 的文件上方的两个文件夹:

    define('BASEURL', realpath(__DIR__ . "/../../"));
    

    或者简化你的自动加载器,使路径相对于它:

    spl_autoload_register('myAutoLoaderPerson');
    
    function myAutoLoaderPerson($className) {
        require_once __DIR__ . "/../../../classes/$className.class.php";
    }
    

    您建议返回 /app/classes/lib\foo.class.php

    注意/\ 的混合。可能区别在于您在本地使用,但在远程使用

    如果您遵循PSR-4 约定,那么这意味着您的命名空间应该与目录匹配,但为了做到这一点,您可能需要将\ 转换为/

    可能是这样的:

    spl_autoload_register('myAutoLoaderPerson');
    
    function myAutoLoaderPerson($className) {
        require_once __DIR__ . "/../<path..to>/classes/" . strtr($classname, "\\", "/") . ".class.php";
    }
    
    
    

    【讨论】:

    • 我现在正在尝试,仍然无法正常工作。无论如何,如果您比较 heroku 日志和我在上面发布的文件结构图片,* 我认为 * 路径链接正确。命名空间在 localhost 和 heroku 中应该是一样的,对吧?
    • 仍然没有骰子。每个建议,如果应用正确,只会在日志上返回“/app/classes/lib\foo.class.php”,这应该是正确的路径。会不会是命名空间的问题? HEELP,我想发表这篇文章,我想找份工作;)
    • 该死的人,终于。此外,它是有道理的。我不知道 windows - linux 的差异。非常感谢您花时间帮助我!
    • 完成。仍然是新的堆栈,我猜我又学到了一件事:)
    猜你喜欢
    • 2021-12-31
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2021-05-14
    • 2017-01-26
    • 1970-01-01
    • 2021-10-29
    相关资源
    最近更新 更多