2012-11-04 2 views
0

저는 젠킨스 2 PHP 애플리케이션을 빌드하고 배포하기 위해 젠킨스 작업을 설정하고 있습니다. 내 개미 스크립트에서 php 파일의 유효성 검사를위한 린트 작업을 정의했습니다.Jenkins에서 Zend Framework PHP 애플리케이션 빌드 및 배포

lint가 ZF2 라이브러리 파일에서 오류를 감지했기 때문에 빌드 작업이 실패했습니다.

[apply] PHP Fatal error: Constructor Zend\Captcha\Factory::factory() cannot be static in /var/lib/jenkins/workspace/XXX/vendor/zendframework/zendframework/library/Zend/Captcha/Factory.php on line 90 
[apply] Errors parsing /var/lib/jenkins/workspace/XXX/vendor/zendframework/zendframework/library/Zend/Captcha/Factory.php 

아무도 Zend/Captcha/Factory.php fails의 이유 검증을 알고 있나요

:

는 출력은 보풀에 의해 생성된다?

개미 작업은 다음과 같습니다 젠드 프레임 워크는 PHP 5.3.3 이상이 필요하기 때문에

<target name="lint" description="Perform syntax check of sourcecode files"> 
    <apply executable="php" failonerror="true"> 
    <arg value="-l" /> 

    <fileset dir="${basedir}/"> 
    <include name="**/*.php" /> 
    <modified /> 
    </fileset> 

    <fileset dir="${basedir}/tests"> 
    <include name="**/*.php" /> 
    <modified /> 
    </fileset> 
    </apply> 
</target> 
+0

귀하의 질문은 귀하가 직업 정의를 게시 한 경우 장래의 방문객에게 더 유용 할 것입니다. 질문에 대답하는 사람의 능력에 차이를 만들지는 모르겠지만 (이것이 내가 downvoted하지 않은 이유입니다) 일반적으로 오류 메시지를 게시하는 것은별로 도움이되지 않습니다. – Ben

+0

어떤 PHP 버전을 사용합니까? 일반적으로 정적 팩토리 메서드에는 아무런 문제가 없습니다 (생성자가 전혀 없습니다). 최신 태그 (2.0.3)는 다음과 같으며 내 컴퓨터 (php 5.3.14)에서 잘 보냈습니다. https://github.com/zendframework/zf2/blob/7f49f1e1a22994ea5d7cf4da1c49119df274b99d/library/Zend/Captcha/Factory.php # L20 –

+0

@ 유리 주석 : 답변 해 주셔서 감사합니다. PHP 5.3.2-1ubuntu4를 사용하고 있습니다.18 Suhosin-Patch – MadeOfSport

답변

4

귀하의 문제입니다. Jenkins 상자는 5.3.2를 사용하기 때문에 다양한 문제가 발생합니다. 그들 중 하나는 지금 당신이 가진 오류 일 것입니다.

개발 시스템에 5.3.3 이상이 설치되어 있기 때문에 이전에이 오류를 알지 못했을 것입니다. 테스트 환경을 최신 버전의 php로 업데이트하면이 특정 문제가 제거됩니다.

업데이트

내 대답은 조금 명확히하려면, 사용자 환경에서 돌아 오면 PHP 5.3.3에서 호환성 휴식 뒤로 하나가있다. this changelog 특히이 사항을 확인하십시오

이전 버전과 호환되지 않는 변경 사항 : 같은 이름을 가진

방법 이름 공간에서 클래스 이름의 마지막 요소가 더 이상 생성자로 취급되지 않습니다있다. 이 변경은 이름 공간이없는 클래스에는 영향을주지 않습니다. 네임 스페이스 만 PHP 5.3에서 도입 되었기 때문에 5.2.x에서 마이그레이션에 영향이 없습니다

<?php 
namespace Foo; 
class Bar { 
    public function Bar() { 
     // treated as constructor in PHP 5.3.0-5.3.2 
     // treated as regular method in PHP 5.3.3 
    } 
} 
?> 

. Zend\Captcha\Factory의 경우

, 당신은 Zend\Captcha\Factory::factory()를 호출 할 수 있도록 정적 방법 factory()있다. PHP 4 및 5에서 5.3.2까지이 메서드는 이고은 팩토리 생성자로 구문 분석됩니다. 생성자는 정적 일 수 없습니다.

인 터는이 경우 치명적인 오류가 발생합니다.

+0

@MadeOfSport 내 업데이트를보고,이 경우에도 PHP 5.3.2가 작동하지 않는 이유를 알려주었습니다. –

+0

Perfect. 귀하의 정확성에 대해 감사드립니다. – MadeOfSport