如何纠正棘轮中的[PHP致命错误:未找到接口'Ratchet\MessageComponentInterface']

Posted

技术标签:

【中文标题】如何纠正棘轮中的[PHP致命错误:未找到接口\'Ratchet\\MessageComponentInterface\']【英文标题】:How to rectify [PHP Fatal error: Interface 'Ratchet\MessageComponentInterface' not found ] in ratchet如何纠正棘轮中的[PHP致命错误:未找到接口'Ratchet\MessageComponentInterface'] 【发布时间】:2015-12-20 05:04:54 【问题描述】:

我正在尝试从 YouTube 中的教程创建一个基本的 websocket 聊天,当我运行时我在终端中遇到了这个错误

php bin/server.php

致命错误: 在第 6 行的 /var/www/html/websocket/bin/chat.php 中找不到接口“Ratchet\MessageComponentInterface”

我的chat.php代码如下:

<?php
namespace MyApp;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

class chat implements MessageComponentInterface
    
        protected $clients;
        public function __construct()
            
                $this->clients=new \SplObjectStorage;
            

        public function onOpen(ConnectionInterface $conn)
            
                $this->clients->attach($conn);
            

        public function onClose(ConnectionInterface $conn)
            
                $this->clients->detach($conn);
            

        public function onMessage(ConnectionInterface $conn,$msg)
            
                foreach($this->clients as $client)
                    if($client !==$conn)
                        $client->send($msg);
                    
                
            

        public function onError(ConnectionInterface $conn, \Exception $e)
            
                echo "the following error occured: ".$e->getMessage();
                 $conn->close();
            
    

server.php 的代码:

<?php
require 'chat.php';
require __DIR__ .'/vendor/autoload.php';
use Ratchet\Server\ioserver;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;

$server=IoServer::factory(new HttpServer(new WsServer (new chat())) , 8080);
$server->run();

任何帮助将不胜感激。

【问题讨论】:

您是否尝试过先声明namespace 并设置它,然后使用use? php.net/manual/en/language.namespaces.importing.php 我并没有真正使用命名空间,但手册似乎首先使用命名空间,然后是 use 做得好还是不行。 你做了namespace Ratchet;?您是否包含了包含 Ratchet 库的文件? 是的,我做了,让我给你看代码@Rasclatt 你的命名空间在哪里?注意第二个片段:socketo.me/docs/hello-world 它说namespace MyApp; 【参考方案1】:

在使用 Ratchet\MessageComponentInterface 之前,包括 autoload.php 文件,该文件包含自动加载的所有定义。

在定义命名空间后包含这段代码sn-p:

require dirname(__DIR__) . '/vendor/autoload.php';

【讨论】:

【参考方案2】:

转到 composer.json 并更改


    "require": 
        "cboden/ratchet": "^0.4"
    


    "autoload": 
        "psr-4": 
            "MyApp\\": "src"
        
    ,
    "require": 
        "cboden/ratchet": "^0.4"
    

并打开命令升级与管理更新作曲家喜欢

composer update

你应该在 composer.json 所在的同一个文件夹目录中

【讨论】:

以上是关于如何纠正棘轮中的[PHP致命错误:未找到接口'Ratchet\MessageComponentInterface']的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:未找到接口“Psr\Container\ContainerInterface”

MPDF 致命错误:未找到接口“Psr\Log\LoggerAwareInterface”

如何修复 PHPUnit 中的“PHP 致命错误:未捕获的 TypeError:getTest() 参数”错误

致命错误 C1010 - Visual Studio 中的“stdafx.h”如何纠正?

致命错误:调用未定义函数 openssl_random_pseudo_bytes()

未找到安装了扩展 php_com_dotnet 的致命错误类 COM