문제

함수가 호출된 위치를 찾는 방법을 생각 중입니다.문제는 PHP가 호출하는 위치를 찾아야 한다는 것입니다. mail() 기능.한 가지 방법은 다음과 같습니다. register_tick_function(), 하지만 각 파일을 열고 각 줄에 무엇이 있는지 확인해야 합니다.프로젝트 규모가 커서 PHP에서 각 파일을 구문 분석하는 데 정말 오랜 시간이 걸립니다.다른 방법은 없나요?또는 옵션을 재정의하는 방법 mail() 기능?

도움이 되었습니까?

해결책

내장 메일 기능을 무시하려면 살펴보십시오. 재정의 _function 어느 것입니다 고급 PHP 디버거 PECL 확장 - 그런 다음 사용할 수 있습니다 debug_backtrace 발신자 세부 정보를 찾으려면 ...

//define code to override mail function (note I've used php5.3 nowdoc syntax to avoid 
//the need to escape the dollar symbols!!
$code=<<<'CODE'
    $trace=debug_backtrace();
    $caller=array_shift($trace);

    echo 'mail() called by '.$caller['function']
    if (isset($caller['class']))
        echo 'in '.$caller['class'];
CODE;

//install override
override_function('mail', '$to,$subject,$msg,$hdrs,$params', $code);

다른 팁

다음을 사용하여 스택 추적을 검사할 수 있습니다. debug_backtrace().여기에는 호출 메서드/함수에 대한 정보가 포함됩니다.예제는 설명서를 참조하세요.

기존 함수에 동작을 추가하려면 함수를 자체 함수나 클래스로 래핑한 다음 기본 함수 대신 이를 호출하세요.

기본 기능을 완전히 재정의하려면 다음을 설치해야 합니다. runkit.그러면 당신은 할 수 있습니다 runkit_redefine_function() (또는 다른 곳에서 제안된 대로 APD를 사용하십시오).

프로젝트의 어디에 있는지 알고 싶다면 mail() 예를 들어 다음과 같이 호출되었습니다.런타임 시 이를 평가할 필요가 없으며 IDE의 검색 기능을 사용하십시오.Eclipse, Zend Studio 및 Netbeans는 파일 검색을 수행할 수 있으므로 호출을 찾고 교체하는 것이 매우 쉽습니다.

Brute Force 접근 방식은 글로벌 검색을 수행하고 코드를 교체하여 "Mail S ("My_mail ( "로)을 대체 한 다음 My_mail을 정의하고 원하는 로깅 기능을 배치하는 것입니다.

"Mail (") 소스를 단순히 검색하지 않는 이유는 무엇입니까?

소스 코드에 액세스 할 수 있습니까?

왜 Jedit과 같은 편집기를 사용하고 모든 우편물이 발생하는지 (* 모든 오픈 버퍼에서?

아니면 실제로 런타임에 라인 번호를 알아야합니까? 나는 당신이 실제로 그렇게한다고 상상할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top