【问题标题】:Segmentation Fault on simple Gearman code. PHP Cli简单 Gearman 代码的分段错误。 PHP 命令行
【发布时间】:2012-11-28 12:53:31
【问题描述】:

这是一个非常悲伤的故事。我正在尝试在我的项目中开始使用 Gearman。但不能运行简单的测试。

root@140141-10009:~# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.1 LTS"

PHP

root@140141-10009:~# php -v
PHP 5.3.10-1ubuntu3.4 with Suhosin-Patch (cli) (built: Sep 12 2012 18:59:41)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

齿轮人

root@140141-10009:~# gearmand -V
gearmand 0.34 - https://bugs.launchpad.net/gearmand

PHP PECL Gearman 1.1.0,从源代码编译,没有错误。所有 (2) 项测试均通过。没有启用其他 PHP 扩展。

client.php:

<?php
$client = new GearmanClient();
$client->addServer('127.0.0.1');
$client->setTimeout(10000);
$client->addTask('taskplus2', 10);
$client->addTask('taskplus2', 15);
$client->runTasks();

错误:

root@140141-10009:~/gearman/proto# php client.php
Segmentation fault

dmesg:

[15066.824900] php[20520]: segfault at f ip 00007f128470ba40 sp 00007fffd9f1dd28 error 4 in libc-2.15.so[7f12845c1000+1b5000]

我已经尝试过 PHP 5.3、5.4、Ububtu 10.04、12.04,使用的是 gearman-ppa,但没有使用。我还尝试了 PECL Gearman 0.8.1、0.8.3、1.0.2、1.0.3、1.1.0。安装所有这些以清理设置 Ubuntu。谷歌搜索libc6 gearman 无效。

【问题讨论】:

    标签: php libc gearman


    【解决方案1】:

    方法GearmanClient::addTask() 接受字符串而不是整数作为第二个参数。

    试试:

    $client->addTask('taskplus2', serialize(10));
    

    【讨论】:

    • 是的,没错。谢谢你。以及为什么它不抛出异常而不是段错误......
    • 这是 PHP ......对于扩展来说,将标量类型转换为字符串到底有多难?来吧扩展作者。
    • 这并不难,但它根本上是错误的:不仅标量可以作为参数传递,对象也可以;我可能想使用 JSON 编码字符串,其他人可能使用 XML 字符串,你可能更喜欢 PHP 序列化字符串。但是,在 case 字符串未作为参数传递时发出警告或抛出异常会很有帮助。
    【解决方案2】:

    尝试从官网更新 gearmand 版本到 1.1.2。

    【讨论】:

    • 谢谢。我尝试了几个版本的服务器和扩展,但都受到了影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多