PHP 8.5.5 不存在,最新稳定版为 8.3.x;应使用 graphaware/neo4j-php-client(v6+)通过 Bolt 协议连接 Neo4j,注意启用 TLS 或显式禁用,并排查服务、配置及 OpenSSL 支持。

PHP 8.5.5 不存在,先确认你的 PHP 版本
PHP 官方没有 8.5.5 这个版本——最新稳定版是 8.3.x(截至 2024 年中),8.4 尚未发布,更不存在 8.5.5。你很可能看错了版本号,比如把某框架或扩展的版本误认为 PHP 版本,或者终端输出有混淆。
确认真实版本的方法很简单:
php -v
如果输出类似 PHP 8.2.12 或 PHP 8.3.6,就以该版本为准。后续所有操作都基于真实 PHP 版本(8.2+ 均适用),而非虚构的 8.5.5。
用官方驱动 neo4j-php-driver 连接 Neo4j
Neo4j 官方推荐且维护的 PHP 驱动是 neo4j-php-driver(由 Neo4j Labs 提供),它基于 Bolt 协议,支持 PHP 8.1+,无需 cURL 或 HTTP 封装,性能和可靠性更好。
立即学习“PHP免费学习笔记(深入)”;
安装方式(需 Composer):
composer require graphaware/neo4j-php-client
注意:这不是官方命名空间 neo4j-php-driver 的包——那个项目已归档;当前活跃、兼容 PHP 8.2+ 的是 graphaware/neo4j-php-client(v6+),它底层封装了官方 Bolt 驱动。
PHP 8.5.12 RC 1 候选版修复 BZ2、DOM、PDO、Opcache/JIT 和扩展内存安全问题,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 连接示例(使用默认配置):
$client = \GraphAware\Neo4j\Client\ClientBuilder::create()
->addConnection('default', 'bolt://localhost:7687')
->build();
$result = $client->run('RETURN "Hello from Neo4j!" AS message');
echo $result->getRecords()[0]->get('message'); // 输出:Hello from Neo4j!
关键点:
-
bolt://是必须的协议前缀,HTTP 连接(http://)不被此客户端原生支持 - 若 Neo4j 启用了认证,需传入用户名密码:
->addConnection('default', 'bolt://neo4j:password@localhost:7687') - PHP 8.2+ 默认启用严格类型,确保
php.ini中未禁用opcache.enable=1,否则某些反射调用可能失败
常见连接失败原因与排查
连不上时,别急着改代码,先检查这三件事:
- Neo4j 服务是否真正运行?执行
curl -I http://localhost:7474(HTTP 管理端)或nc -zv localhost 7687(Bolt 端口)验证端口可达性 - Neo4j 配置是否允许远程 Bolt 连接?检查
conf/neo4j.conf中:dbms.connector.bolt.enabled=true且dbms.connector.bolt.advertised_address=localhost:7687(开发环境可设为0.0.0.0,但生产环境慎用) - PHP 进程是否有 OpenSSL 支持?
neo4j-php-client默认启用 TLS(Bolt over TLS),若 Neo4j 未配证书,需显式禁用:->withDriverConfig(['no_tls' => true])
典型错误信息:
-
Connection refused→ Neo4j 未启动,或 Bolt 端口被防火墙拦截 -
Unable to connect to server→ URL 格式错(漏掉bolt://)、地址写成127.0.0.1但 Neo4j 绑定在localhost(DNS 解析差异) -
Authentication failed→ 用户名密码错误,或 Neo4j 仍处于首次启动的默认密码状态(需先用浏览器访问http://localhost:7474修改)
替代方案:用 cURL 手动调 HTTP API(不推荐但可行)
如果你因环境限制无法安装 Composer 包,或只想快速测试查询,可以用 PHP 原生 curl_init() 调 Neo4j 的 HTTP REST 接口:
$ch = curl_init('http://localhost:7474/db/neo4j/tx');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Basic '.base64_encode('neo4j:your_password')
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'statements' => [['statement' => 'RETURN 1 AS n']]
]));
$response = curl_exec($ch);
但要注意:
- HTTP 模式性能明显低于 Bolt,高并发下容易成为瓶颈
- 事务管理复杂(需手动处理
tx开启/提交/回滚),而neo4j-php-client自动封装 - Neo4j 5.x+ 默认禁用 HTTP 端点(
dbms.connector.http.enabled=false),需手动开启
真正上线项目,请坚持用 Bolt 驱动。HTTP 方式只适合临时调试或极简脚本。
版本搞错、协议选错、TLS 配置没关——这三个点卡住绝大多数人。确认好再动手,比反复试错快得多。


















