2017-08-17 18 views
0

私はLinuxインスタンス上にphpでWebソケットを設定しようとしています。どちらのファイルも私の/ var/www/htmlディレクトリにあります。最初のものはChat.phpと呼ばれ、次のコードが含まれます:PHPクラスファイルが存在していても見つからない

<?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) { 
    } 
} 

?> 

chat-server.phpと呼ばれ、このコードが含まれている第二の:

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

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

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

$server->run(); 

?> 

私は、次のエラーメッセージが表示されますchat-server.phpを実行しよう:

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

01を開始しようとすると、はクラスが見つからないためです。何故なの?

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

これは新しいを定義します

+0

このクラスは 'chat-server.php'にはないので、' Chat.php'にあります。 'Chat.php'を' chat-server.php'に含めてクラス定義を認識できるようにする必要があります。 –

+0

それは 'MyApp \ Chat;を使用しているのではないですか? –

+0

いいえ、インスタンス化するときに 'MyApp \ Chat'の絶対名の代わりにクラスを' Chat'として参照できるようにしています。 'include" Chat.php ";'のようなものが必要です。 –

答えて

0

は、私はあなたが最初のautoloadプロパティの下に、次のようなものを追加することにより、composer.jsonファイルを編集した後に、作曲オートローダ(autoload.php)を再生することをお勧め名前空間とディレクトリの間のマッピング。 その後、自動ロードスクリプトを再生成するために、単純に入力します。また

composer dumpautoload -o 

を、スクリプトの中でトップを配置する必要がありオートローダを必要とします。 詳細については、オートローディングに関するコンポーザの公式文書を確認してください:https://getcomposer.org/doc/01-basic-usage.md#autoloading

関連する問題