从PHP连接到OrientDB
我想为OrientDB的二进制API编写
PHP适配器.
但是我需要一些在PHP中具有原始套接字通信经验的人的帮助 – 我似乎无法超越将PHP连接到OrientDB的第一个障碍. 如果有人使用套接字来体验这个,我将不胜感激: http://code.google.com/p/orient/issues/detail?id=126 如果我们可以通过第一个障碍并实际发送一个数据包(该页面底部的简化示例 – 请向下滚动到最后),我当然可以编写适配器. 如果我这样做,这当然会作为开源发布. 希望有人可以帮助我开始? 谢谢! 2010年11月20日 引用PEAR的Net_Socket,我最终得到了与早期尝试的相同的代码,使用fsockopen()和常规的PHP流函数. 我仍然无处可去.服务器根本没有反应,即使设置了5秒的超时,脚本也会进入深度睡眠状态,直到超出一般的PHP脚本时间限制才会出现. 这是代码: <?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()函数: <?php 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下… 解决方法
实际上,我忘记了究竟是什么问题 – 但我确实让它发挥了作用.
如果其他人需要查看工作实现(无论是对于OrientDB还是其他东西),请随时查看公共存储库: https://github.com/mindplay-dk/OrientDB-PHP (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |