当前位置: 首页 > 工具软件 > OrientDB API > 使用案例 >

php orientdb,从PHP连接到OrientDB

林德惠
2023-12-01

我想为OrientDB的二进制API编写

PHP适配器.

但是我需要一些在PHP中具有原始套接字通信经验的人的帮助 – 我似乎无法超越将PHP连接到OrientDB的第一个障碍.

如果有人使用套接字来体验这个,我将不胜感激:

如果我们可以通过第一个障碍并实际发送一个数据包(该页面底部的简化示例 – 请向下滚动到最后),我当然可以编写适配器.

如果我这样做,这当然会作为开源发布.

希望有人可以帮助我开始?

谢谢!

2010年11月20日

引用PEAR的Net_Socket,我最终得到了与早期尝试的相同的代码,使用fsockopen()和常规的PHP流函数.

我仍然无处可去.服务器根本没有反应,即使设置了5秒的超时,脚本也会进入深度睡眠状态,直到超出一般的PHP脚本时间限制才会出现.

这是代码:

header('Content-type: text/plain');

error_reporting(E_ALL | E_NOTICE | E_WARNING);

$txid = 123;

$db = 'demo';

$username = 'writer';

$password = 'writer';

$packet = "\x05". # 1 byte

pack('i',$txid). # 4 bytes

pack('i',strlen($db)).$db. # string

pack('i',strlen($username)).$username. # string

pack('i',strlen($password)).$password; # string

hex_dump($packet);

$addr = '127.0.0.1';

$port = 2424;

$timeout = 5;

$errstr = '';

$errno = 0;

$socket = fsockopen($addr, $port, $errno, $errstr, $timeout);

stream_set_blocking($socket, 1);

socket_set_timeout($socket, $timeout);

var_dump($socket);

fwrite($socket, $packet);

$response = '';

while (!feof($socket))

$response .= fread($socket, 1024);

hex_dump($response);

fclose($socket);

这是我用来检查我提交的数据包的hex_dump()函数:

function hex_dump($data, $newline="\n")

{

static $from = '';

static $to = '';

static $width = 16; # number of bytes per line

static $pad = '.'; # padding for non-visible characters

if ($from==='')

{

for ($i=0; $i<=0xFF; $i++)

{

$from .= chr($i);

$to .= ($i >= 0x20 && $i <= 0x7E) ? chr($i) : $pad;

}

}

$hex = str_split(bin2hex($data), $width*2);

$chars = str_split(strtr($data, $from, $to), $width);

$offset = 0;

foreach ($hex as $i => $line)

{

echo sprintf('%6X',$offset).' : '.implode(' ', str_split($line,2)) . ' [' . $chars[$i] . ']' . $newline;

$offset += $width;

}

}

根据OrientDB的作者Luca Garulli的说法,我提交的数据包看起来是正确的.所以别的什么不对……

这可能是一个Windows问题吗?我在Windows上使用PHP 5.3,在Apache下…

 类似资料: