我正在尝试运行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
这个问题被问到了,但这个问题仍然没有答案 Class 'MyChat\Chat' not found in C:\wamp\www\bin\chat-server.php
答案 0 :(得分:18)
如果你没有在根目录下的composer.json文件和vendor文件夹,它将无效。另外,请勿触摸供应商文件夹(和子文件夹)。文件夹结构必须如下:
/composer.json
/composer.phar
/vendor/[misc]
/src/MyApp/Chat.php
最后,在更新composer.json之后,请确保运行更新:
php composer.phar update
这样就可以了。
答案 1 :(得分:9)
您必须提及需要自动加载的类的基本路径:
{
"autoload": {
"psr-4": {
"MyApp\\": "src/MyApp/"
}
},
"require": {
"cboden/ratchet": "^0.4.0",
"react/zmq": "0.2.*|0.3.*"
}
}
然后运行
Composer dump-autoload
答案 2 :(得分:8)
自动加载的主要路径是composer.json文件的位置,因此如果它存在于/var/www/src/MyApp/
中,则自动加载将使用该文件作为基础。
在您的情况下,您说可以在MyApp
目录中找到src
命名空间(这意味着/var/www/src/MyApp/src
)。这不是真的,因为文件/var/www/src/MyApp/src/MyApp/Chat.php
不存在。
您可以通过3种不同的方式解决此问题:
composer.json
- 您可以将composer.json
文件移至/var/www
,以便将其作为基础使用; "autoload": { "psr-4": { "MyApp\\": "" } }
; 重新组织文件 - 您还可以将文件结构更改为:
/var/www/src/MyApp/
src/MyApp/
Chat.php
composer.json
答案 3 :(得分:5)
首先尝试自动加载文件:
$ composer update
如果仍然无效,请在require 'chat.php';
文件的开头添加行chat-server.php
。它对我有用。
答案 4 :(得分:3)
这是我的工作配置:
root
├── bin
│ └── chat-server.php
├── src
│ └── Chat.php
├── composer.json
├── composer.lock
└── vendor
{
"autoload": {
"psr-4": {
"MyApp\\": "src"
}
},
"require": {
"cboden/ratchet": "^0.4"
}
}
本教程没有提到在 composer.json 中添加/更新 autoload
部分后,您需要运行 composer install
来重新生成自动加载文件强>.
答案 5 :(得分:0)
我在这个问题上挣扎了几个小时,发现我错过了一些包裹。我能用这个命令修复它:
php composer.phar install --no-dev -o
这是我跑步后看到的照片: installed packages
希望这有帮助!
答案 6 :(得分:0)
就我而言,花了半天后,我才意识到错误是因为我错过了这一行:
update TableA A
set A.IsCorrect= case when T.cnt>=3 then 1 else 0 end
inner join
(
select B.UserID ,count(*) as cnt from TableB as B
group by UserID
) as T
on A.userid=T.UserID