PHP 5.6连接Firebird 1.5报错:connection rejected by remote interface 求解决
你遇到的错误:
Connection attempt failed: SQLSTATE[HY000] [335544421] connection rejected by remote interface
结合你已排查的情况(防火墙放行3050端口、同网络其他机器可正常访问、Firebird 1.5不支持wireCrypt配置),可以从以下几个方向尝试解决:
换用InterBase函数替代PDO
PHP 5.6的PDO Firebird扩展对旧版本Firebird兼容性可能不佳,试试更传统的ibase_connect函数,它对早期Firebird/InterBase版本支持更好:$conn = ibase_connect("localhost/3050:/pathToMyDatabase.fdb", "SYSDBA", "masterkey", "UTF8");注意:使用前需确保PHP已启用
interbase扩展(在php.ini中开启extension=interbase.so或extension=php_interbase.dll)。匹配Firebird客户端库版本
PHP的Firebird扩展依赖系统中的客户端库(如libfbclient.so或fbclient.dll),必须使用Firebird 1.5对应的客户端库,不能用新版本的。新版本客户端会使用不兼容的协议,导致服务器拒绝连接。调整DSN参数与格式
尝试修改PDO的DSN,换用IP地址替代localhost(避免本地解析问题),或指定兼容的协议版本:// 用IP地址替代localhost $str_conn="firebird:dbname=127.0.0.1/3050:/pathToMyDatabase.fdb;charset=UTF8"; // 尝试指定旧协议版本(部分扩展支持) $str_conn="firebird:dbname=localhost/3050:/pathToMyDatabase.fdb;charset=UTF8;client_version=1.5";同时确认数据库路径绝对正确,Linux下要保证PHP进程有该文件的读权限。
查看Firebird服务器日志
前往Firebird安装目录的logs文件夹找到firebird.log,里面会记录连接拒绝的具体原因(比如协议版本不匹配、认证错误),这是定位问题最直接的方式。再次验证SYSDBA密码
虽然其他机器能连,但要确保代码里的masterkey密码完全正确,Firebird密码默认区分大小写,别出现拼写错误。
内容的提问来源于stack exchange,提问作者Arnaldo Cícero Bezerra

