PHP8连接ScyllaDB报错主因是官方Cassandra扩展已废弃且不兼容,须改用scylladb/php-cql纯PHP客户端;需先验证9042端口连通性、禁用cassandra扩展、配置正确认证参数并使用Composer安装客户端。

PHP8连接ScyllaDB时出现“Class 'Cassandra' not found”或“Connection refused”类报错,核心原因是ScyllaDB不原生支持PHP的Cassandra扩展,且官方驱动已停止维护;必须改用兼容CQL协议的纯PHP客户端并手动处理连接参数与认证逻辑。
确认ScyllaDB服务状态与端口连通性
先验证底层链路是否通畅,避免在配置层浪费时间。ScyllaDB默认监听9042端口,不是3306或5432。
执行 nc -zv your-scylla-host 9042,若返回 Connection refused 或超时,说明服务未运行或网络策略阻断。
检查ScyllaDB进程:在服务端运行 systemctl status scylla,确保状态为 active (running);若非此状态,执行 sudo systemctl start scylla 启动。
立即学习“PHP免费学习笔记(深入)”;
云环境(如AWS EC2、阿里云ECS)必须额外检查安全组规则——入方向需放行TCP 9042端口,源IP不能写成127.0.0.1或0.0.0.0/0以外的受限网段。
停用已废弃的cassandra扩展
PHP 8.0+ 官方不再支持 cassandra 扩展,该扩展自2021年起停止更新,且与ScyllaDB 4.0+ 的CQLv4协议不兼容。继续启用会导致 Class 'Cassandra' not found 或段错误。
打开 php.ini,搜索 extension=cassandra 或 extension=php_cassandra.dll,在该行前加 ; 注释掉。
【必须重启PHP服务】 否则修改不生效。FPM用户执行 sudo systemctl restart php-fpm,Apache用户执行 sudo systemctl restart apache2。
运行 php -m | grep -i cassandra,确认无任何输出,表示已彻底禁用。
安装并配置纯PHP CQL客户端
选用社区维护的轻量级客户端 gocql/gocql 的PHP移植版 scylladb/php-cql(非PECL扩展),它通过Socket直连,无需编译,兼容PHP 8.0–8.5.5。
方法一:使用Composer安装(推荐)
进入项目根目录 → 执行 composer require scylladb/php-cql → 确保 vendor/autoload.php 已引入。
方法二:手动下载引入
从 GitHub Releases 下载最新 php-cql.phar 文件 → 放入项目 lib/ 目录 → 在代码顶部添加 require_once 'lib/php-cql.phar';。
注意:不要混用两种方式,否则会因类重复定义报 Fatal error: Cannot declare class。
编写可运行的连接测试脚本
第一步:创建 test-scylla.php
第二步:填入以下内容(替换 YOUR_HOST、YOUR_USER、YOUR_PASS):
<?php<br>
require_once 'vendor/autoload.php';<br>
use ScyllaDB\CQL\Session;<br>
<br>
try {<br>
$session = new Session([<br>
'host' => 'YOUR_HOST',<br>
'port' => 9042,<br>
'username' => 'YOUR_USER',<br>
'password' => 'YOUR_PASS',<br>
'timeout' => 5.0,<br>
'ssl' => false // ScyllaDB默认不启用SSL,设为true需配ca.pem<br>
]);<br>
$result = $session->execute("SELECT now() FROM system.local");<br>
echo "ScyllaDB连接成功,当前时间戳:" . $result[0]['now'] . "\n";<br>
} catch (Exception $e) {<br>
echo "连接失败:" . $e->getMessage() . "\n";<br>
}<br>
?>
第三步:终端执行 php test-scylla.php,看到时间戳即表示连接通路建立完成。



















