2012-11-28 2 views
1

이것은 매우 슬픈 이야기입니다. 내 프로젝트에서 Gearman을 사용하려고합니다. 그러나 간단한 테스트를 실행할 수는 없습니다.간단한 Gearman 코드의 세그먼트 오류. PHP Cli

[email protected]:~# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu 
DISTRIB_RELEASE=12.04 
DISTRIB_CODENAME=precise 
DISTRIB_DESCRIPTION="Ubuntu 12.04.1 LTS" 

PHP

[email protected]:~# 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 

Gearman을

[email protected]:~# gearmand -V 
gearmand 0.34 - https://bugs.launchpad.net/gearmand 

PHP PECL Gearman을 1.1.0, 오류없이 소스 compliled. 모든 (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(); 

오류 :

[email protected]:~/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] 

이미 Gearman을-PPA를 사용하여, PHP 5.3, 5.4, Ububtu 10.04, 12.04 시도 사용하지 말라. 나는 또한 PECL Gearman 0.8.1, 0.8.3, 1.0.2, 1.0.3, 1.1.0을 시도했다. 이 모든 것을 우분투의 클린 설정에 설치합니다. libc6 gearman의 인터넷 검색은 효과가 없습니다.

답변

2

GearmanClient::addTask() 메서드는 두 번째 매개 변수로 정수가 아닌 문자열을 허용합니다.

시도 :

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

네, 맞습니다. 고맙습니다. 그리고 segfault 대신에 예외를 던지지 않는 이유는 ... – happyproff

+0

그리고 이것은 PHP입니다 ... 확장이 스칼라 유형을 문자열로 변환하는 것이 얼마나 어려울까요? 확장자 작성자를 대동합니다. – rdlowrey

+0

그것을하는 것은 어렵지 않지만 근본적으로 잘못되었습니다. 그것은 인수가 될 수도 있지만 객체가 될 수있는 스칼라 일뿐만 아니라, JSON 인코딩 된 문자열을 사용하고 싶거나 다른 사람이 XML 문자열을 사용하고 PHP 직렬화 된 문자열을 선호 할 수 있습니다. 다만, 인수로서 인수를 건네주지 않는 경우는, 경고 또는 예외의 슬로우를 발행하는 것이 도움이됩니다. –

0

gearmand 버전을 공식 웹 사이트에서 1.1.2로 업데이트하십시오.

+0

감사합니다. 나는 여러 버전의 서버와 확장 기능을 시험했지만 모든 기능이 영향을 받았다. – happyproff