PHP 소스 파일에 대한 정적 분석 도구가 있습니까? 이진 자체는 구문 오류를 확인할 수 있지만 다음과 같이 더 많은 일을 찾고 있습니다.
- 사용되지 않은 변수 할당
- 먼저 초기화하지 않고 할당 된 배열
- 코드 스타일 경고
- ...
PHP 소스 파일에 대한 정적 분석 도구가 있습니까? 이진 자체는 구문 오류를 확인할 수 있지만 다음과 같이 더 많은 일을 찾고 있습니다.
답변:
명령 행에서 lint-mode로 php를 실행하여 실행하지 않고 구문을 검증하십시오.
php -l FILENAME
고급 정적 분석기에는 다음이 포함됩니다.
하위 레벨 분석기에는 다음이 포함됩니다.
PHP의 동적 특성으로 인해 일부에 더 유용한 런타임 분석기는 다음과 같습니다.
문서 라이브러리 phpdoc 및 doxygen 은 일종의 코드 분석을 수행합니다. 예를 들어 Doxygen은 graphviz 를 사용하여 멋진 상속 그래프를 렌더링하도록 구성 할 수 있습니다 .
또 다른 옵션은 xhprof 이며 xdebug와 비슷하지만 더 가벼워 프로덕션 서버에 적합합니다. 이 도구에는 PHP 기반 인터페이스가 포함되어 있습니다.
php -l
한 번에 하나의 입력 파일 만 읽을 수 있기 때문입니다 (즉, 그렇게하면 작동하지 않습니다 php -l file1.php file2.php
). 대신 명령 프로세스 당 하나의 입력 행만 사용하도록 -n 1
지시 하는 옵션 을 사용해야합니다 xargs
. 그 대신 실행하게됩니다 php -l file1.php
다음에 php -l file2.php
별도로. 동시에 -P <n>
실행을 병렬화하기 위해 한 번에 "n"프로세스를 실행 하는 데 사용할 수 있습니다 .find . -name '*.inc' -o -name '*.php' -print0 | xargs -0 -n1 -P10 php -l
find /your/path -name '*.php' -exec php -l {} \;
신뢰할 수 있습니다.
php -l
일까지), 당신은 설정해야합니다 display_errors = on
에 php.ini
, 그렇지 않으면 당신은 단지 거기에 대한 일반적인 메시지되는 구문 오류하지만 오류 (들) 또는 무엇 라인 (들)에 대한 더 자세한 내용을 얻을 것이다.
-d
스위치를 사용하여 명령 행의 설정을 무시할 수 있습니다 . 예php -l -d display_errors=on $FILENAME
완성도 -phpCallGraph 도 확인 하십시오 .
PHP Mess Detector 는 훌륭하고 빠릅니다.
나는 $ php -l을 사용하고 다른 도구를 사용하려고 시도했다. 그러나 내 경험 중 가장 좋은 것은 (물론 YMMV) pfff toolset 검사 입니다. Quora에서 pfff에 대해 들었습니다 ( http://www.quora.com/Is-there-a-good-PHP-lint-static-analysis-tool )
컴파일하고 설치할 수 있습니다. 좋은 패키지는 없습니다 (내 민트 데비안에서는 먼저 libpcre3-dev, ocaml, libcairo-dev, libgtk-3-dev 및 libgimp2.0-dev 종속성을 설치해야 함)는 가치가 있습니다.
결과는 다음과 같이보고됩니다
rjha@mint ~ $ ~/sw/pfff/scheck ~/code/github/sc/
login-now.php:7:4: CHECK: Unused Local variable $title
go-automatic.php:14:77: CHECK: Use of undeclared variable $goUrl.
복사 / 붙여 넣기 / 편집 된 코드를 찾는 "복제 탐지"도구 인 Semantic Designs의 CloneDR을 참조하십시오 . 공백, 주석 및 가변 이름 변경에도 불구하고 정확하고 거의 누락 된 코드 조각을 찾을 수 있습니다. PHP에 대한 샘플 탐지 보고서는 웹 사이트에서 찾을 수 있습니다. (저는 저자입니다).
PHP 용 nWire 라는 새로운 도구가 있습니다 . Eclipse PDT 및 Zend Studio 7.x 용 코드 탐색 플러그인입니다. PHP에 대한 실시간 코드 분석을 활성화하고 다음 도구를 제공합니다.
이 PHP 스크립트의 취약점에 대한 정적 소스 코드 분석 - 입술은 . SourceForge 에서 사용할 수있는 RIPS 출처 .
RIPS 사이트에서 :
RIPS는 정적 코드 분석을 사용하여 PHP 응용 프로그램의 취약성을 찾기 위해 PHP로 작성된 도구입니다. 모든 소스 코드 파일을 토큰 화하고 파싱하여 RIPS는 PHP 소스 코드를 프로그램 모델로 변환하고 프로그램 흐름 중에 사용자 입력 (악의적 인 사용자에 의해 영향을 받음)으로 오염 될 수있는 민감한 싱크 (잠재적으로 취약한 기능)를 감지 할 수 있습니다. 발견 된 취약점의 구조화 된 결과 외에도 RIPS는 추가 수동 분석을위한 통합 코드 감사 프레임 워크를 제공합니다.
정적 코드 분석을위한 PHP Analyzer 라는 완전히 새로운 도구가 있습니다 .
여러 유형의 정적 분석 중에서 기본 자동 수정 기능도 제공합니다 ( 문서 참조) .
업데이트 : PHP-Analyzer는 더 이상 사용되지 않지만 여전히 레거시 브랜치에서 액세스 할 수 있습니다
Facebook의 힙합으로 컴파일하려고 할 수 있습니다.
전체 프로젝트에 대한 정적 분석을 수행하며 원하는 것일 수 있습니다.