PHP 致命错误:类“MyApp\Chat”在 /MyApp/chat-server 中找不到.php

2022-08-30 21:38:37

我正在尝试运行 Ratchet 应用程序演示,但无法执行该文件

这是我的文件结构

/var/www/src/MyApp/
/var/www/src/MyApp/chat.php
/var/www/src/MyApp/chat-server.php
<?php
use Ratchet\Server\IoServer;
use MyApp\Chat;

#require "chat.php";

    require 'vendor/autoload.php';

    $server = IoServer::factory(
        new Chat(),
        8080
    );

    $server->run();
/var/www/src/MyApp/composer.json
{
    "autoload": {
        "psr-0": {
            "MyApp": "src"
        }
    },
    "require": {
        "cboden/Ratchet": "0.3.*"
    }
}

此位置中存在供应商文件夹

/var/www/src/MyApp/vendor/

每当我在终端中执行聊天服务器文件时,我都会收到以下错误

PHP Fatal error:  Class 'MyApp\Chat' not found in /MyApp/chat-server.php

请帮助我如何解决这个问题

注意:本页中存在完整的代码详细信息

http://socketo.me/docs/hello-world

这个问题被问到,但仍然没有答案,也没有答案类“MyChat\Chat”在C:\wamp\www\bin\chat-server中找不到.php


答案 1

如果您没有 composer.json 文件和根目录下的供应商文件夹,则它将无法正常工作。此外,不要触摸供应商文件夹(和子文件夹)。文件夹结构必须如下所示:

/composer.json
/composer.phar
/vendor/[misc]
/src/MyApp/Chat.php

最后,在更新 composer.json 后,请确保运行更新:

php composer.phar update

这样它就可以工作了。


答案 2

自动加载的主要路径是 composer.json 文件的位置,因此,如果该文件位于 中,则自动加载将使用它作为基础。/var/www/src/MyApp/

在你的例子中,你说命名空间可以在目录中找到(这意味着 )。事实并非如此,因为该文件不存在。MyAppsrc/var/www/src/MyApp/src/var/www/src/MyApp/src/MyApp/Chat.php

您可以通过3种不同的方式解决此问题:

  • 移动 composer.json - 您可以将文件移动到 ,以便能够将其用作基础;composer.json/var/www
  • 更新自动加载(使用 PSR-4) - 您也可以使用 PSR-4 代替 PSR-0 并将其配置为"autoload": { "psr-4": { "MyApp\\": "" } };
  • 重新组织文件 - 您还可以将文件结构更改为:

    /var/www/src/MyApp/
        src/MyApp/
                Chat.php
        composer.json
    

推荐