已开启PHP.ini中sockets扩展仍遇OrientDB连接Socket异常求助
你遇到的错误信息:
Fatal error: Uncaught PhpOrient\Exceptions\SocketException: Error 0 : The operation completed successfully in C:\xampp\htdocs\tugas\PhpOrient\src\PhpOrient\Protocols\Binary\OrientSocket.php:91
Stack trace:
#0 C:\xampp\htdocs\tugas\PhpOrient\src\PhpOrient\Protocols\Binary\SocketTransport.php(146): PhpOrient\Protocols\Binary\OrientSocket->connect()
#1 C:\xampp\htdocs\tugas\PhpOrient\src\PhpOrient\Protocols\Binary\Abstracts\Operation.php(76): PhpOrient\Protocols\Binary\SocketTransport->getSocket()
#2 C:\xampp\htdocs\tugas\PhpOrient\src\PhpOrient\Protocols\Binary\SocketTransport.php(223): PhpOrient\Protocols\Binary\Abstracts\Operation->__construct(Object(PhpOrient\Protocols\Binary\SocketTransport))
#3 C:\xampp\htdocs\tugas\PhpOrient\src\PhpOrient\Protocols\Binary\SocketTransport.php(161): PhpOrient\Protocols\Binary\SocketTransport->operationFactory('PhpOrient\Proto...', Array)
#4 C:\xampp\htdocs\tugas\PhpOrient\src\PhpOrient\PhpOrient.php(247): PhpOrient\Protocols\Binary\SocketTransport->execute('connect', Array)
#5 C:\xampp\htdocs\tugas\coba.php(8): PhpOrient\PhpOrient->connect()
#6 {main} thrown in C:\xampp\htdocs\tugas\PhpOrient\src\PhpOrient\Protocols\Binary\OrientSocket.php on line 91
你的PHP代码:
<?php require "PhpOrient/vendor/autoload.php"; use PhpOrient\PhpOrient; $client = new PhpOrient( 'localhost', 2424 ); $client->username = 'root'; $client->password = '0r13ntDB'; $client->connect(); ?>
已开启sockets扩展的php.ini片段:
; The MIBS data available in the PHP distribution must be installed. ; See https://www.php.net/manual/en/snmp.installation.php ;extension=snmp ;extension=soap extension=sockets ;extension=sodium ;extension=sqlite3 ;extension=tidy extension=xsl
针对这个矛盾的错误提示(错误码0却提示操作成功),按以下步骤排查:
确认OrientDB服务状态与端口监听
打开任务管理器(Windows)或用ps命令(Linux)检查OrientDB进程是否在运行。再用telnet localhost 2424或Windows的Test-NetConnection localhost -Port 2424测试端口是否能连通,确保服务确实监听了2424端口。替换localhost为127.0.0.1
部分环境下localhost解析可能异常,修改代码中的连接地址为IP尝试:$client = new PhpOrient( '127.0.0.1', 2424 );检查OrientDB的二进制连接配置
打开OrientDB安装目录下的config/orientdb-server-config.xml,确认存在如下配置且端口为2424:<listener protocol="binary" port-range="2424-2424" ip-address="0.0.0.0"/>同时确保
<protocols>节点下包含二进制协议定义:<protocol name="binary" implementation="com.orientechnologies.orient.server.network.protocol.binary.ONetworkProtocolBinary"/>排查防火墙或安全软件拦截
Windows防火墙、杀毒软件可能阻止PHP进程访问2424端口。临时关闭防火墙测试连接,若成功,需将OrientDB服务或PHP进程加入防火墙允许列表。验证sockets扩展是否真正生效
创建phpinfo.php文件,内容为<?php phpinfo(); ?>,访问后搜索sockets,确认扩展状态为已加载。若未加载,重启Apache/Nginx服务确保php.ini修改生效。检查版本兼容性
确认PhpOrient版本与OrientDB版本匹配,比如OrientDB 3.x需要对应版本的PhpOrient。可尝试更新PhpOrient到最新稳定版,或降级OrientDB到兼容版本。
内容的提问来源于stack exchange,提问作者neneo

