使用brightzone gremlin-php连接Cosmos DB调用send方法报错
使用brightzone gremlin-php调用Cosmos DB时出现fwrite资源为null的错误
问题概述
基于免费版Cosmos DB,使用brightzone gremlin-php API开发应用时,官方CLI脚本可正常运行,但自定义调用send()方法时触发以下错误:
Fatal error: Uncaught TypeError: fwrite(): Argument #1 ($stream) must be of type resource, null given {...}
错误位于vendor/brightzone/gremlin-php/src/Connection.php第174行。
补充测试结果:
- 通过XAMPP浏览器或虚拟主机运行官方
connect.php脚本无报错,Cosmos仪表盘显示请求量正常上升 - 自定义代码使用与官方一致的对象初始化逻辑,但调用
send()时触发错误
代码对比
官方CLI脚本初始化后,通过函数调用send():
function countVertices($db) { $query = "g.V().count()"; $result = $db->send($query); // ...后续逻辑 } // 官方脚本中大概率在调用此函数前已执行$db->open()
自定义代码直接调用send():
$query = "g.V().count()"; $result = $db->send($query); var_dump($result);
解决方案
你大概率遗漏了建立连接的步骤。在调用send()方法前,必须先执行$db->open()初始化连接流:
$query = "g.V().count()"; // 先建立连接 $db->open(); $result = $db->send($query); var_dump($result); // 用完记得关闭连接(可选但推荐) $db->close();
原因分析
brightzone gremlin-php的Connection类需要通过open()方法初始化与Cosmos DB的WebSocket连接,生成有效的stream资源。官方CLI脚本可能在调用业务函数前已经执行了$db->open(),而你的自定义代码直接跳过了这一步,导致send()方法执行时stream为null,触发fwrite的类型错误。
这和Cosmos DB免费版限制无关,是API调用流程的疏漏。
内容的提问来源于stack exchange,提问作者FEERspreads
相关产品推荐
相关产品推荐

