composer php和Linux生产服务器 – 自动加载无法正常工作

我已经试过寻找这个问题,并看到了一些答案,但没有运气…

我使用Slim Framework v3安装了composer php。

我在composer.json文件中使用PSR-4为我的文件使用自动加载,如下所示:

"autoload": { "psr-4": { "App\\": "App" } } 

这是我的文件夹结构:

在这里输入图像描述

我使用Apache 2.4在本地Mac OS X El Capitan上运行它,一切都像魔术一样工作。 但是,当我上传到我的Production Linux服务器(也与Apache 2.4),自动加载似乎非常困惑,我得到这样的错误:

警告:包含(/ home / friendsapp / public_html / vendor / composer /../../ app / Middleware / AuthMiddleware.php):未能打开stream:/ home / friendsapp / public_html / vendor /composer php/ ClassLoader.php第412行

警告:include():打开'/home/friendsapp/public_html/vendor/composer/../../app/Middleware/AuthMiddleware.php'包含失败(include_path ='。:/ usr / lib / php:/ usr / local / lib / php')在412行的/home/friendsapp/public_html/vendor/composer/ClassLoader.php上

致命错误:第5行中的/home/friendsapp/public_html/public/index.php中找不到类“App \ Middleware \ AuthMiddleware”

我有我的class完全按​​照我的文件夹结构命名空间。

 <?php namespace App\Middleware; use \Psr\Http\Message\ServerRequestInterface as Request; use \Psr\Http\Message\ResponseInterface as Response; use \App\Middleware\Middleware; use \App\Share\ErrorCode; use \App\Models\ResultMessage; use \App\Mappers\AccessTokenMapper; class AuthMiddleware extends Middleware { 

非常感激任何的帮助! 🙂

看看错误/app/Middleware/AuthMiddleware.php中的路径

看起来问题是由于您的生产环境中指向/appApp\\名称空间冲突导致的,而您的PSR-4声明指向/App

为避免冲突并映射指定目录的所有命名空间,可以使用classmap的自动加载classmap或config optimize-autoloader (可选)选项来定义指定目录中所有文件和对象的物理路径作曲家加载。 此外,通过PSR-4声明,将尝试从App命名空间路径声明中加载在classmap路径中找不到的任何文件。 例如,使用exclude-from-classmap选项时。

 "config": { "optimize-autoloader": true }, "autoload": { "psr-4": { "App\\": "App/" }, "classmap": [ "App/", ], } 

composer.json进行更改后,请确保在您的开发环境中运行php composer.phar update --lock

然后,将composer.lockcomposer.json文件上传到您的生产环境后,从生产环境运行php composer.phar install --no-dev -ophp composer.phar dump-autoload --no-dev -o

-o选项将强制执行optimize-autoloader映射,而--no-dev将禁止安装开发包( require-dev )。 建议在生产环境中使用optimize-autoloader


作为一种惯例,只要您将开发更改部署到您的生产环境中,您就需要运行php composer.phar install --no-dev -o请参阅如何在使用Composer的开发/生产交换机时正确部署? 。 这样,使用php composer.phar update从您的开发环境应用的更改将正确安装在生产环境中。