【问题标题】:Class not found with composer autoload in different servers在不同的服务器中使用 composer autoload 找不到类
【发布时间】:2020-09-15 22:42:55
【问题描述】:

我有一个非常简单的 PHP/Composer 应用程序,其结构如下:

- src
  - content
    - test
      - Sandbox.php

Sandbox.php 只有一个静态函数来打印“test”,它的命名空间是

namespace MyApplication\Content\Test;

我的 autoload.php 有 MyApplication 一个“自动加载”属性。

"autoload" : {
    "psr-4": {"MyApplication\\": "src/"}
},

我在带有 XAMPP 的 Windows 环境中运行 composer install --no-dev,并在我执行的 test.php 文件中运行(为了进行非常简单的测试):

$autoloadFile = __DIR__ . '/wp-content/plugins/sandbox/vendor/autoload.php';
require $autoloadFile;
echo 'autoload = ' . file_exists($autoloadFile);
echo '<br />';
echo 'class_exists = ' . class_exists('MyApplication\Content\Test\Sandbox');

当我在本地运行这个 test.php 文件时,它运行良好。 MyApplication 正在加载 Sandbox 类。

但是,当我将它发布到基于 Linux 的服务器但在 相同的 PHP 版本上运行时,找不到 Sandbox 类。

我确保我的 /vendor/ 文件夹也已正确上传。

我想知道问题是否正在发生,因为我在 Windows 环境中运行 composer install 而它应该在我的服务器中运行相同的命令(我目前不能)。 /vendor/ 文件夹上传不应该足以让自动加载类正常工作吗?

【问题讨论】:

  • 这能回答你的问题吗? PSR-4 autoloader Fatal error: Class not found
  • 你尝试过什么调试问题?
  • @rob006 不幸的是,没有。我以前试过。这很奇怪,因为在我的开发环境中它可以工作,但是当我将它发布到另一台服务器时它就不行了。
  • @nico-haase 目前我唯一可以调试的是检查 error_log 文件,它告诉我找不到我的课程。我希望同样的错误可以在本地发生。这样我就有更多的工具可以调试。

标签: php composer-php autoload


【解决方案1】:

文件的路径是 src/content/test/Sandbox.php,根据 PSR-4,它应该是 src/Content/Test/Sandbox.php - 在 Windows 上无关紧要,但在 Linux 上却可以。

【讨论】:

    猜你喜欢
    • 2018-12-28
    • 2017-07-24
    • 2014-05-21
    • 1970-01-01
    • 2014-07-30
    • 2018-06-06
    • 1970-01-01
    • 2014-11-30
    • 2011-03-11
    相关资源
    最近更新 更多