You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法运行Gearman Worker:undefined symbol: ZVAL_NEW_ARR问题求助

问题

已完成如下配置与验证:

  • 系统安装Gearman,执行php --info | grep gearman确认Gearman扩展已启用,libgearman版本为1.1.19.1+ds
  • 在php.ini中添加配置extension=/usr/lib/php/20210902/gearman.so
  • 执行lsof -i tcp:4730确认gearmand服务正常监听4730端口

但运行Gearman官方Worker示例代码时,触发以下错误:

php: symbol lookup error: /usr/lib/php/20210902/gearman.so: undefined symbol: ZVAL_NEW_ARR

Worker代码:

$worker= new GearmanWorker();
$worker->addServer();
$worker->addFunction("reverse", "my_reverse_function");
while ($worker->work());

function my_reverse_function($job)
{
  return strrev($job->workload());
}

Client代码:

$client= new GearmanClient();
$client->addServer();
print $client->do("reverse", "Hello World!");

解决方案

错误原因

该错误是由于gearman.so扩展的编译版本与当前运行的PHP版本内核API不兼容导致的。ZVAL_NEW_ARR是PHP内核中的内部符号,PHP 7.x到8.x版本间的内核API存在变更,若Gearman扩展是基于旧版PHP API编译的,在新版PHP环境中就会出现符号未定义的问题。

修复步骤

  1. 确认当前PHP版本
    执行命令查看PHP版本:

    php -v
    

    注:/usr/lib/php/20210902/路径对应PHP 8.1的API版本,可确认当前PHP是否为8.1系列。

  2. 移除当前不兼容的Gearman扩展

    • 若通过包管理器安装,执行对应卸载命令(如Debian/Ubuntu系):
      sudo apt remove php-gearman
      
    • 手动删除扩展文件:
      sudo rm /usr/lib/php/20210902/gearman.so
      
  3. 重新编译安装适配当前PHP版本的Gearman扩展
    推荐通过PECL安装,会自动适配当前PHP的内核API:

    1. 安装编译依赖:
      sudo apt-get install php-dev libgearman-dev
      
    2. 安装Gearman扩展:
      pecl install gearman
      
    3. 安装完成后,按照终端提示在php.ini中添加扩展配置(通常为extension=gearman.so,无需指定绝对路径,PHP会自动查找)。
  4. 重启PHP服务
    根据你的PHP运行环境执行重启命令,例如FPM模式:

    sudo systemctl restart php8.1-fpm
    
  5. 验证并测试
    再次执行php --info | grep gearman确认扩展正常加载,然后重新运行Worker和Client代码即可。

内容的提问来源于stack exchange,提问作者Jake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:50:38