【发布时间】:2023-05-18 09:46:01
【问题描述】:
尝试将 PHP 与 thrift 一起使用,但由于无法找到某些类,我无法正常运行它。我能够在 0.8.0 中很好地做到这一点,现在我已经下载了 0.9.0,我不知道应该如何正确包含 thrift 文件。
这是我的sn-p代码:
$GLOBALS['THRIFT_ROOT'] = '/home/user/final/Thrift';
require_once( $GLOBALS['THRIFT_ROOT'] . '/Transport/TSocket.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/Transport/TBufferedTransport.php' );
require_once( $GLOBALS['THRIFT_ROOT'] . '/Protocol/TBinaryProtocol.php' );
require_once( 'Hbase/Hbase.php');
require_once( 'Hbase/Types.php');
use Hbase\HbaseClient;
try
{
$socket = new TSocket('127.0.0.1', 9090);
$transport = new TBufferedTransport($socket, 1024, 1024);
$protocol = new TBinaryProtocolAccelerated($transport);
$client = new HbaseClient( $protocol );
$transport->open();
//show all tables
$tables = $client->getTableNames();
foreach ( $tables as $name )
{
echo( " found: {$name}\n" );
}
}
catch (Exception $e)
{
echo "Exception: %e\r\n";
}
所有文件都在目录中正确布局,如下所示:
但是当我从命令行(php -f index.php)运行文件时,我收到了这个错误:
类 'Thrift\Transport\TTransport' 未在 /home/user/final/Thrift/Transport/TSocket.php 在第 35 行
我真的不知道接下来应该做什么,我不熟悉在 PHP 中使用“use”命令或“namespace”,我觉得这将有助于解决这个问题。 php 的节俭自述文件也提到了使用 symfony,这让我更加困惑。
任何建议将不胜感激!
谢谢!
【问题讨论】:
-
这是因为 thrift 0.9.0 php 使用命名空间,您必须使用支持 thrift 的全新库。如果您想使用 0.9.0,请忘记对 0.8.0 的支持
-
如果您仍然对这个主题感兴趣,请查看我在 github 上的示例 thrift 应用程序:github.com/tkoomzaaskz/wealthy-laughing-duck。它运行一个 java 服务器和一个轻量级 PHP 客户端。代码在 maven 结构下,但你会在 src/main/php 中找到 PHP 代码
标签: php hbase thrift thrift-protocol