Autoloader在将PHP网站部署到Heroku时出现问题

时间:2020-02-25 10:53:01

标签: php class heroku autoloader

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

File structure

Heroku log

它在localhost中可以正常工作。我已经对将路径从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;
}

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您确定正确填写了$_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";
}