programing

PHP에서 현재 기능을 실행하는 코드 라인 및 파일을 가져오시겠습니까?

procenter 2022. 10. 30. 16:20
반응형

PHP에서 현재 기능을 실행하는 코드 라인 및 파일을 가져오시겠습니까?

다음과 같은 상황이 있다고 상상해 보십시오.

파일1.php

<?php
 include("Function.php");
 log("test");
?>

기능.php

<?php
 function log($msg)
 {
  echo "";
 }
?>

로그 기능을 변경하여 다음을 생성하려고 합니다.

test (파일: File1.php, 회선번호: 3)

그렇다면, PHP에서 현재 기능을 실행한 코드의 파일 이름과 라인 번호를 얻을 수 있는 방법이 있을까요?

백로그 사용 코멘트 편집:객체 지향 프로그래밍 방식으로 백로그를 사용하면 다음과 같은 상황이 발생합니다.

Index.php

<?php
 include("Logger.static.php");
 include("TestClass.class.php");
 new TestClass();
?>

TestClass.class.php

<?php
 class TestClass
 {
   function __construct()
   {
     Logger::log("this is a test log message");
   }
 }
?>

Logger.static.php

<?php
 class Logger
 {
   static public function log($msg)
   {
     $bt = debug_backtrace();
     $caller = array_shift($bt);
     echo $caller['file'];
     echo $caller['line'];
   }
 }
?>

이 예에서는 파일 "Index.php"로 반환되며 행 번호4 로서 클래스가 시작됩니다.단, TestClass.class 파일을 반환해야 합니다.php 및 행 번호 6.이걸 어떻게 고칠지 알아?

debug_backtrace()를 사용할 수 있습니다.

http://us3.php.net/manual/en/function.debug-backtrace.php

따라서 로그 함수에서는 로그 함수가 호출된 파일 이름과 행 번호를 가져올 수 있습니다.

로그 클래스에서 이 방법을 사용하고 있기 때문에 의미 있는 로그 데이터를 취득하는 데 필요한 코드의 양이 대폭 감소했습니다.또 다른 장점은 가독성입니다.마법의 상수는 현과 섞이면 꽤 추해지는 경향이 있다.

다음은 간단한 예입니다.

function log($msg)
{
  $bt = debug_backtrace();
  $caller = array_shift($bt);

  // echo $caller['file'];
  // echo $caller['line'];

  // do your logging stuff here.    
}

debug_backtrace()를 사용하여 콜스택을 트레이스할 수 있습니다.속도가 느릴 수 있으니 로깅을 많이 하는 경우에는 주의해야 합니다.

만약 당신이 PHP 5.3을 사용한다면, 당신은 레이트 스태틱바인딩을 이용할 수 있고 기본 클래스 메서드는log()자녀 클래스는 이를 호출할 수 있지만 여전히 에 대한 정적 참조를 유지할 수 있습니다.__FILE__그리고.__LINE__.

마지막 옵션은 그냥 통과입니다.__FILE__그리고.__LINE__를 호출할 때 파라미터로log()기능.

이것은 오래된 질문이지만, 나의 솔루션이 여기에 없는 것을 생각하면, 나는 그것을 후세에 제공할 것이다.

     try{
        throw new Exception();
    }catch ( Exception $e ){
        $trace = $e->getTrace();
    }

    $length = 0;

    foreach ($trace as $t){
        if( $t['file'] != __FILE__ ){
            break;
        }
        ++$length;
    }
    return array_slice( $trace, ($length - count( $trace ) ));

깨끗한 스택트레이스를 취득하려면 , 이 파일이 격납되어 있는 최초의 행(통상은 에서 호출되고 있는 행)을 검색할 필요가 있습니다.트레이스의 인덱스를 알고 있는 경우 또는 함수를 사용할 수도 있습니다.

예외 스택 트레이스는 다음과 거의 같습니다.debug_backtrace(true).

언급URL : https://stackoverflow.com/questions/1252529/get-code-line-and-file-thats-executing-the-current-function-in-php

반응형