오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!

醉折花枝作酒筹
풀어 주다: 2023-03-10 21:10:02
앞으로
1919명이 탐색했습니다.

코드 조각이 전체 호출 체인을 볼 수 없는 경우 전체 호출 체인을 명확하게 쿼리하는 데 도움이 되는 도구가 필요합니까? 이번에는 편집기를 통해 PHP의 Deliverer에 대해 배울 수 있으므로 더 이상 코드 문제 해결에 대해 걱정할 필요가 없습니다.

오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!

몇일 전 그룹 친구가 조상 코드 조각을 인수했는데, 오랫동안 문제를 해결하지 못해서 물통을 들고 도망가서 마침내 문제를 해결하게 되었습니다. 전체 프로세스는 https://mengkang.net/1470.html에서 찾을 수 있습니다. 그러나 결국에는 개인적인 경험을 바탕으로 코드 위치를 지정했습니다. 호출된 실제 링크는 모두 제가 예상한 것과 다릅니다. . 전체 호출 체인을 볼 수 없었기 때문에 전체 호출 체인을 명시적으로 쿼리하는 데 도움이 되는 도구가 필요하다고 생각했습니다.

그래서 저는 주로 일상 환경에서 재현하기 어려운 익숙하지 않은 프로젝트와 온라인 시나리오를 위해 이 도구를 만들었습니다.

deliver 조상 코드의 구원자 탈출 https://github.com/zhoumengka...

프로젝트가 그다지 나쁘지 않고 일상 환경도 괜찮다면 프로젝트에 익숙해지는 가장 좋은 방법은 xdebug입니다. 이 도구는 주로 온라인 문제를 해결하는 것입니다.
유사한 도구에는 360의 phptrace 구현 원리가 포함되어 있지만 약간 다릅니다

기능 포인트

  • 함수 이름, 클래스 이름, 메서드 이름, 경로를 기준으로 출력을 필터링할 수 있습니다

  • 지정된 필터를 쿼리할 수 있습니다 content n번 후에 종료

  • 요청 ID를 기반으로 전체 콜 체인을 재생할 수 있습니다

  • 필터링된 콘텐츠가 강조 표시됩니다

  • 콜 스택이 깊은 경우 -l을 지정하여 숨길 수 있습니다 딥 콜 표시

Principle

사실 비교적 간단합니다. 첫 번째 단계는 로그를 수집하는 단계이고 두 번째 단계는 로그를 분석하는 단계입니다.

첫 번째 단계

PHP_MINIT 단계에서 zend_set_user_opcode_handler를 사용하여 ZEND_DO_UCALL, ZEND_DO_FCALL_BY_NAME 및 ZEND_DO_FCALL의 세 가지 유형의 opcode 처리 및 분석을 설정합니다.

일부 내장 함수 및 메소드에 대한 호출을 다루며 유형별로 필터링할 수 있습니다.

그런 다음 PHP_RINIT 단계에서 새 로그 파일을 생성하고 요청된 정보를 작성합니다

pid-ts sapi http_method http_url
로그인 후 복사

요청 프로세스 중에 사용자 정의 핸들러에서 호출 스택 정보를 인쇄합니다

마지막으로 PHP_RSHUTDOWN에서 로그 파일 작성을 닫습니다

The 두 번째 단계

bin/deliverer를 사용하여 수집된 로그를 분석하고 정리합니다. 이는 PHP 스크립트이므로 자세히 설명하지 않겠습니다.

설치 및 사용

컴파일

$ phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && sudo make install
로그인 후 복사

php.ini 구성

Append

[deliverer]
extension=deliverer.so
로그인 후 복사

php-fpm 재시작

sudo service php-fpm restart
로그인 후 복사

분석 도구 사용

./bin/deliverer 이동 가능 적합하다고 생각하는 디렉토리, 오래전부터 내 조상 코드(내 블로그)를 사용하여 현재 디렉토리에서 실행하는 경우

$ chmod +x deliverer
로그인 후 복사

$ ./bin/deliverer -t
로그인 후 복사

이것은 항상 모든 PHP 프로세스의 실행을 모니터링합니다.

오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!

$ ./bin/deliverer -tAction::initUser -n3 -l5
로그인 후 복사

오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!

오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!

ParametersValueExplanation
-t작업::init User이 통화가 포함된 요청을 필터링하세요
-n 33번 세고 종료
-l5함수(메소드) 호출 심도 표시, 최대 5레이어까지 표시, 초과된 부분은 마지막에 표시
$ ./bin/deliverer -v7979-1624369150991941
로그인 후 복사

사용 -v requestId 전체 호출 스택을 자세히 보려면 ​​

오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!

$ ./bin/deliverer -tSqlExecute::getAll -n1 -l3
로그인 후 복사

메서드를 쿼리할 때 함수 호출 스택이 너무 깊어 계층 쿼리 범위 내에 있지 않으며 외부 호출이 빨간색으로 표시됩니다

오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!

추천 학습: php 비디오 튜토리얼

위 내용은 오랫동안 기다려온 PHP 코드 구원자 Deliverer가 왔습니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿