2017-08-17 3 views
0

Also ich versuche, Web-Sockets mit PHP auf einer Linux-Instanz einzurichten, und habe zwei Dateien. Beide Dateien befinden sich in meinem Verzeichnis/var/www/html. Die erste ist Chat.php genannt und enthält den folgenden Code:PHP-Class-Datei nicht gefunden, obwohl es existiert

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

class Chat implements MessageComponentInterface { 
    public function onOpen(ConnectionInterface $conn) { 
    } 

    public function onMessage(ConnectionInterface $from, $msg) { 
    } 

    public function onClose(ConnectionInterface $conn) { 
    } 

    public function onError(ConnectionInterface $conn, \Exception $e) { 
    } 
} 

?> 

Die zweite ist chat-server.php und enthält diesen Code genannt:

<?php 
use Ratchet\Server\IoServer; 
use MyApp\Chat; 

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

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

$server->run(); 

?> 

Wenn ich versuche, chat-server.php ich die folgende Fehlermeldung auszuführen:

PHP Fatal error: Class 'MyApp\Chat' not found in /var/www/html/chat-server.php on line 8

So klar, es mag es nicht, wenn ich versuche, eine 01 zu initiierenweil es die Klasse nicht findet. Warum nicht?

+0

Da die Klasse nicht in 'Chat-Server.php' ist, ist es in' Chat.php'. Sie müssten 'Chat.php' in' chat-server.php' einfügen, damit sie die Klassendefinition kennt. –

+0

ist das nicht, was "MyApp \ Chat;" tut? –

+0

Nein, das macht es nur so, dass Sie die Klasse als "Chat" anstatt des absoluten Namens von "MyApp \ Chat" bezeichnen können, wenn Sie es instanziieren. Du brauchst noch etwas wie "include" Chat.php ";". –

Antwort

0

Ich schlage vor, Sie den Composer Autoloader (autoload.php) zu regenerieren, nachdem Sie zuerst durch Zugabe von etwa wie folgt unter der Autoload-Eigenschaft die composer.json Datei bearbeiten:

"psr-4": {"MyApp\\": "/"} 

Dieses eine neue definieren würde Zuordnung zwischen Namespaces zu Verzeichnissen. Dann das automatische Laden von Skript zu regenerieren, geben Sie einfach:

composer dumpautoload -o 

Auch den Autoloader erfordert oben in Ihrem Skript platziert werden soll. Für weitere Informationen, überprüfen Sie die offizielle Dokumentation des Komponisten in Bezug auf Autoloading: https://getcomposer.org/doc/01-basic-usage.md#autoloading

Verwandte Themen