esports-alliance/teamspeak3-core
现代的即用即享框架,提供单独的组件来管理 TeamSpeak 3 服务器实例
Requires
- php: >=7.0
- ext-ctype: *
- ext-json: *
- ext-openssl: *
- phpseclib/phpseclib: ^1.0
Requires (Dev)
- dealerdirect/phpcodesniffer-composer-installer: ^0.7.1
- friendsofphp/php-cs-fixer: ^2.0.0
- php-coveralls/php-coveralls: ^2.2
- phpcompatibility/php-compatibility: ^8.2
- phpunit/phpunit: ^4.8.35 || ^5.4.3 || ^6.0 || ^7.0
- react/socket: ^0.8.5
- squizlabs/php_codesniffer: ^3.3
- symfony/yaml: ~2.1|~3.0|~4.0
This package is not auto-updated.
Last update: 2024-09-24 05:00:16 UTC
README
最初于2010年1月发布,TS3 PHP 框架是一个功能强大、开源的面向对象框架,采用 PHP 5 实现,并许可在 GNU 通用公共许可证下使用。它基于简洁性和经过严格测试的敏捷代码库。通过脚本扩展您服务器的功能,或创建强大的网络应用程序来管理您 TeamSpeak 3 服务器实例的所有功能。
经过彻底测试。企业级且采用敏捷方法构建的 TS3 PHP 框架从一开始就进行了单元测试,以确保所有代码保持稳定,并且易于您扩展、使用您的扩展重新测试,以及进一步维护。
为什么 TS3 PHP 框架比其他库更好?
TS3 PHP 框架是一个现代的即用即享框架,提供单个组件来与 TeamSpeak 3 服务器通信。
与其他基于 PHP 的库相比,有许多关于 TS3 PHP 框架的论点。它是其类别中最动态且功能最丰富的软件,并且在使用正确时提供前所未有的性能。
特性
TS3 PHP 框架的特性包括
- 完全面向对象且符合 E_STRICT 的 PHP 5 组件
- 通过 ServerQuery 访问所有 TeamSpeak 3 服务器功能
- 集成全功能且可定制的 TSViewer 接口
- 完全支持文件传输,上传和/或下载自定义图标和其他内容
- 使用异常和可自定义的错误消息进行强大的错误处理能力
- 针对官方服务(如黑名单和自动更新服务器)的查询机制
- 基于事件的脚本动态信号槽
通过使用此小巧的软件加快新开发并降低维护成本!
安装
要求
- PHP - 基于 PHP 7.x 开发,针对测试的目标为 7.4.x。
- TeamSpeak 服务器 - v3.4.0 (构建 >= 1536564584) 或更高版本。
常与...
- 服务器 - Apache、nginx、php-fpm、CLI
- 数据库 - 独立(sqlite)、Maria DB、PostgreSQL
- 开发 - Git、composer、docker、PHPUnit
请注意,TS3 PHP 框架的大多数开发和部署是在 nginx 上完成的,因此 Apache 上的社区经验和测试比其他 Web 服务器更多。
您可以通过手动下载或使用 Composer 来安装 TS3 PHP 框架
composer require planetteamspeak/ts3-php-framework
上面的命令将安装最新可用的版本。
如果您想安装 TS3 PHP 框架的 master
分支(这可能尚未发布/标记),则需要运行
composer require planetteamspeak/ts3-php-framework:dev-master
测试
要运行所有测试,请使用 composer run tests
。
有用链接
访问以下页面以获取有关 TS3 PHP 框架的更多信息
入门
连接 URI(选项 + IPv4 与 IPv6)
在您能够运行“获取服务器实例的版本”或“更新一些设置”之类的命令之前,您需要指定要连接到的实例。这是通过在 TeamSpeak3::factory($uri)
中使用 URI 来完成的。
基本 $uri
总是看起来像这样
$uri = "serverquery://username:password@127.0.0.1:10011/";
注意:如果您的URI中包含特殊字符,您需要使用rawurlencode对这些部分进行编码
$uri = "serverquery://" . rawurlencode("test!@#$%^&*()_+") . ":" . rawurlencode('sd5kjKJ2') . "@127.0.0.1:10011/";
您还可以在URI的最后一个/
之后添加一些选项。
要连接到特定的虚拟TeamSpeak 3服务器,请使用它的virtualserver_port
$uri = "serverquery://username:password@127.0.0.1:10011/?server_port=9987";
可以通过简单的&
添加其他选项,就像在HTTP GET URL中一样
$uri = "serverquery://username:password@127.0.0.1:10011/?server_port=9987&blocking=0";
可用选项的列表可以在TeamSpeak3 > factory中找到
TS3 PHP框架支持连接到IPv6 TeamSpeak主机。IPv6地址必须写成方括号内
$uri = "serverquery://username:password@[fe80::250:56ff:fe16:1447]:10011/";
您可以使用这个简单的技巧,根据提供的IP地址类型始终获取正确的URI
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { $uri = "serverquery://username:password@${ip}:10011/"; } elseif(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { $uri = "serverquery://username:password@[${ip}]:10011/"; } else { echo "${ip} is no valid IPv4 or IPv6 address!"; }
SSH连接(仅适用于TeamSpeak服务器)
可以使用可选的ssh
参数建立SSH连接
$uri = "serverquery://username:password@[fe80::250:56ff:fe16:1447]:10022/?ssh=1";
SSL/TLS连接(仅适用于TeaSpeak服务器)
可以使用可选的tls
参数建立安全的ServerQuery连接
$uri = "serverquery://username:password@[fe80::250:56ff:fe16:1447]:10011/?tls=1";
自定义协议欢迎消息和/或MOTD(仅适用于TeaSpeak服务器)
如果您正在运行一个带有自定义MOTD的TeaSpeak服务器,只需在开始ServerQuery连接之前定义CUSTOM_PROTO_IDENT
和/或CUSTOM_MOTD_PREFIX
define("CUSTOM_PROTO_IDENT", "MyTS3"); define("CUSTOM_MOTD_PREFIX", "Hello");
编码URI特殊字符
当将URI作为参数传递时,某些部分可能需要包含特殊字符。您应在这些部分上使用rawurlencode
// Bad: $uri = "serverquery://test!@#$%^&*()_+:sd5kjKJ2@127.0.0.1:10011/"; // Good: $uri = "serverquery://" . rawurlencode("test!@#$%^&*()_+") . ":sd5kjKJ2@127.0.0.1:10011/";
注意:编码URI组件而不是整个URI字符串。有效的特殊字符需要保持未编码状态!
特殊字符在新版的RFC 3986中被定义为不在(ascii, latin)集中的任何字符
ALPHA / DIGIT / "-" / "." / "_" / "~"
其他
- 最常见的情况是只对'username'和'password'部分进行编码。
- 如果没有使用特殊字符,则无需编码。
- 路径和查询组件需要额外的解析,例如,我们不想对有效的'/'和'&'进行编码。
- 片段组件可能需要使用旧的
urlencode
进行编码。 - RFC 1738 - 用于URI编码的旧版RFC
- RFC 3986 - 当前的URI标准
- RFC 2396 - 第3节 - 有效的URI语法(特别是,组件)
- PHP.net - rawurlencode
常规PHP代码(require
解决方案)
常规PHP代码意味着一个简单的创建的file.php
,您将像这样开始编写代码
<?php echo "Hello World!";
当您使用此解决方案时,您可能会像这样开始使用TS3 PHP框架
<?php // load framework files require_once("libraries/TeamSpeak/TeamSpeak.php"); try { // IPv4 connection URI $uri = "serverquery://username:password@127.0.0.1:10011/?server_port=9987"; // connect to above specified server, authenticate and spawn an object for the virtual server on port 9987 $ts3_VirtualServer = TeamSpeak3::factory($uri); // spawn an object for the channel using a specified name $ts3_Channel = $ts3_VirtualServer->channelGetByName("I do not exist"); } catch(TeamSpeak3_Exception $e) { // print the error message returned by the server echo "Error " . $e->getCode() . ": " . $e->getMessage(); }
PHP代码在MVC(use
解决方案)中
当您使用基于MVC的软件,如Symfony、CakePHP、Laravel或类似软件时,您可能会使用类似这样的代码
<?php use PlanetTeamSpeak\TeamSpeak3Framework\TeamSpeak3; use PlanetTeamSpeak\TeamSpeak3Framework\TeamSpeak3_Exception; class TeamspeakController extends Controller { public function doSomething() { try { // IPv4 connection URI $uri = "serverquery://username:password@127.0.0.1:10011/?server_port=9987"; // Create new object of TS3 PHP Framework class $TS3PHPFramework = new TeamSpeak3(); // connect to above specified server, authenticate and spawn an object for the virtual server on port 9987 $ts3_VirtualServer = $TS3PHPFramework->factory($uri); // spawn an object for the channel using a specified name $ts3_Channel = $ts3_VirtualServer->channelGetByName("I do not exist"); } catch(TeamSpeak3_Exception $e) { // print the error message returned by the server return "Error " . $e->getCode() . ": " . $e->getMessage(); } } }
有关更多信息,请访问文档(见上方的有用链接)。
Docker
设置本地TeamSpeak3测试实例(amd64,Alpine Linux)
docker run --name teamspeak_server -p 9987:9987/udp -p 10011:10011 -p 30033:30033 -e TS3SERVER_LICENSE=accept teamspeak:latest
或简单地启动预定义的docker容器docker-compose.yml
docker-compose up
添加-d
标志以在后台运行。选项/示例:Docker文档 | Docker Hub
使用完整Docker Stack部署TeamSpeak 3与Maria DB
// If fresh Docker install, you might need to:
docker swarm init
// Deploy stack with latest TS3, PHP 7.x, Maria DB:
docker stack deploy -c docker-compose.yml teamspeak
额外的实用命令
docker logs teamspeak_server # View container logs
docker exec -it teamspeak_server sh # Open shell in container
docker stop teamspeak_server # Stop container
docker rm teamspeak_server # Remove container
docker ps # Show all processes
docker stack ps # Show stack processes
docker stack ls # List stacks
注意:在部署Docker Stack时,容器将具有唯一的名称
$ docker stack ps teamspeak
CONTAINER ID IMAGE ... NAMES
f97fe9827b08 mariadb:latest ... teamspeak_db.1.xbwjm6jcu5qow44u5i9da2hcv
f9c1538b9875 teamspeak:latest ... teamspeak_teamspeak.1.rr3sipmw6dhod92wuhgs3s1rn