将 php 网站部署到 heroku 时自动加载器出现问题

Problem with autoloader in deploying php website to heroku

当我的 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;
}

我做错了什么?

您确定$_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

注意 /\ 的组合。可能不同之处在于您在 locally, but on 远程。

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

可能是这样的:

spl_autoload_register('myAutoLoaderPerson');

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