PHP로 콘솔에 쓰려면 어떻게해야합니까?


324

문자열을 쓰거나 콘솔에 로그인 할 수 있습니까?

내 말은

JSP에서와 같이 system.out.println("some"), 우리와 같은 것을 인쇄 하면 페이지가 아닌 콘솔에 나타납니다.

답변:


145

Firefox

Firefox에서는 PHP 응용 프로그램에서 콘솔로 정보를 로깅하고 덤프 할 수있는 FirePHP 라는 확장명을 사용할 수 있습니다 . 이것은 멋진 웹 개발 확장 프로그램 Firebug 의 애드온 입니다.

크롬

그러나 Chrome을 사용하는 경우 Chrome Logger 또는 webug 라는 PHP 디버깅 도구 가 있습니다 (webug에 로그 순서에 문제가 있음).

보다 최근에는 Clockwork 가 활발히 개발 중이며 유용한 디버깅 및 프로파일 링 정보를 제공하기 위해 새 패널을 추가하여 개발자 도구를 확장합니다. Laravel 4 및 Slim 2에 대한 기본 지원을 제공 하며 확장 가능한 API를 통해 지원을 추가 할 수 있습니다.

Xdebug 사용

PHP를 디버깅하는 더 좋은 방법은 Xdebug를 사용하는 것 입니다. 대부분의 브라우저는 필요한 쿠키 / 쿼리 문자열을 전달하여 디버깅 프로세스를 초기화하는 데 도움이되는 도우미 확장을 제공합니다.


5
Xdebug Helper라는 PHP 디버깅을위한 Safari 확장 기능도 있습니다. 나는이 페이지에서 그것을 설치했다 : extensions.apple.com/#tab
— Mark Mckelvie

3
화재 PHP 링크가 죽었
— 브라이언 Leishman

9
echo "<script> console.log ( 'PHP :',", get_option ( "slides_data"), "); </ script>";
— Azmat Karim Khan

4
OP는 HTML / js 콘솔이 아닌 표준 출력으로 인쇄하고 싶다고 말합니다.
— beppe9000

6
FirePHP는 공식적으로 사망했습니다.
— TimSparrow

407

또는 PHP 디버그에서 콘솔로 의 트릭을 사용합니다 .

먼저 작은 PHP 도우미 기능이 필요합니다

function debug_to_console($data) {
    $output = $data;
    if (is_array($output))
        $output = implode(',', $output);

    echo "<script>console.log('Debug Objects: " . $output . "' );</script>";
}

그런 다음 다음과 같이 사용할 수 있습니다.

debug_to_console("Test");

다음과 같은 출력이 생성됩니다.

Debug Objects: Test

5
FireFox v27에서는 다음과 같이 출력됩니다"Debug Objects: " . $data . ""
— Mawg는 Monica

이를보다 유용하게 만드는 유일한 방법은 로그에서 변수 $ name : 'data'쌍을 수행하는 것입니다. 그래도 좋은 기능.
— 명령적인

10
@Mawg (및 해당 의견을 찬성 한 사람들) : $data출력에가 나타나면 표시된대로 기능을 정확하게 입력하지 않은 것입니다. 작은 따옴표와 큰 따옴표를주의 깊게 살펴보고 위 코드와 일치하는지 확인하십시오. $dataPHP 변수입니다; 페이지가 브라우저로 전송 될 때까지 해당 php 변수는에 전달 된 매개 변수로 대체됩니다 debug_to_console. 브라우저는 절대로 보이지 않아야합니다 $data. ( page source브라우저 에서 살펴보면 이라고 말하지 않아야합니다 $data.)
— ToolmakerSteve

1
내 게시물에 힌트를 주셔서 감사합니다. 그러나 시간과 지식이 바뀌었고 기능도 바뀌 었습니다.) 지금 업데이트했습니다.
— bueltge

3
다시 말해, 대답은 다음과 같습니다. echo "<script> console.log ( 'Debug Objects :". $ output. "'); </ script>";
— Christine

69

간단한 접근 방식을 찾고 있다면 JSON으로 에코하십시오.

<script>
    console.log(<?= json_encode($foo); ?>);
</script>

4
이것은 조금 더 문맥을 추가합니다 :function debug_log( $object=null, $label=null ){ $message = json_encode($object, JSON_PRETTY_PRINT); $label = "Debug" . ($label ? " ($label): " : ': '); echo "<script>console.log(\"$label\", $message);</script>"; }
— robrecord

OP는 HTML / js 콘솔이 아닌 표준 출력으로 인쇄하고 싶다고 말합니다.
— beppe9000

@ beppe9000 맞지 않습니다. OP는 PHP에서 콘솔로 쓸 수 있는지 묻습니다. 인용구 : "문자열에 쓰거나 콘솔에 로그인 할 수 있습니까?"
— 도슨 얼바인

이것으로 var_dumps 및 이와 유사한 것을 피할 수 있습니다. 훌륭하게 작동하며 콘솔을 사용하면 json을 멋진 방식으로 전환 할 수 있습니다.
— Mbotet 2016 년


37

다음을 시도하십시오. 작동 중입니다.

echo("<script>console.log('PHP: " . $data . "');</script>");

5
PHP는 처리가 끝나면 모든 페이지를 전송하기 때문에 실시간이 아닙니다. 또한 php 파일에 오류가있는 경우 오류 페이지 만 반환하므로 이전 인쇄는 무시하므로 로그를 볼 수 없습니다.
— Miro Markaravanes 2

1
@MiroMarkaravanes가 절대적으로 정확하다는 것을 지적하고 싶습니다. 치명적인 오류로 인해 가능한 모든 단일 오류를 처리 / 포착하지 않으면 console.log가 출력되지 않을 수 있습니다. 특히 출력 버퍼링을 사용할 때-버퍼가 화면에 표시되지 않으면 console.log 출력도 아닙니다. 염두에 두어야 할 부분입니다.
— whoshotdk

1
OP는 HTML / js 콘솔이 아닌 표준 출력으로 인쇄하고 싶다고 말합니다.
— beppe9000

19
echo 
"<div display='none'>
    <script type='text/javascript'>
        console.log('console log message');
    </script>
</div>";

를 만듭니다

<div>

이랑

display="none"

div가 표시되지 않지만

console.log()

함수는 자바 스크립트로 생성됩니다. 콘솔에 메시지가 나타납니다.


3
기술적으로 이것은 초기 질문에 대한 정답입니다-PHP에서 브라우저 콘솔에 쓰는 방법. 그러나 저자는 PHP를 디버깅하려고 시도하므로 더 나은 옵션이 있습니다. 엄격하게 말하면 정답입니다.
— Rolf

1
나는 확실히 그것이 매우 도움이된다는 것을 알았습니다!
— 알버트

간단하게 말하면이 솔루션은 설명이 필요하기 때문에 훌륭합니다. 특히 내가 겪고있는 것과 동시에 씹을 것이 많을 때.
— Olu Adabonyan

2
왜 당신이 필요한지 이해가되지 않습니다 div. 당신은 단지이있는 경우 <script>블록을, 아무것도 브라우저에 표시되지 않습니다.
— Kodos Johnson

1
또한 오류 메시지가 변수에 저장되거나 따옴표가 포함 된 경우 따옴표 json.encode가 코드 행을 손상시키지 않도록 메시지를 호출로 랩핑하는 것이 좋습니다. 예를 들면 다음과 같습니다.echo "<script>console.log(".json_encode($msg).")</script>";
— SherylHohman

18

인기있는 답변 의 링크 된 웹 페이지 작성자 로서이 간단한 도우미 함수의 마지막 버전을 추가하고 싶습니다. 훨씬 더 견고합니다.

내가 사용하는 json_encode()변수 유형이 아닌 필요한 경우에 대한 검사를하고도 프레임 워크의 문제를 해결하기 위해 버퍼를 추가 할 수 있습니다. 의 반품 또는 과다 사용이 없습니다 header().

/**
 * Simple helper to debug to the console
 *
 * @param $data object, array, string $data
 * @param $context string  Optional a description.
 *
 * @return string
 */
function debug_to_console($data, $context = 'Debug in Console') {

    // Buffering to solve problems frameworks, like header() in this and not a solid return.
    ob_start();

    $output  = 'console.info(\'' . $context . ':\');';
    $output .= 'console.log(' . json_encode($data) . ');';
    $output  = sprintf('<script>%s</script>', $output);

    echo $output;
}

용법

// $data is the example variable, object; here an array.
$data = [ 'foo' => 'bar' ];
debug_to_console($data);`

결과 스크린 샷

또한 훨씬 쉽게 이해할 수있는 이미지로 간단한 예를 들어보십시오.

여기에 이미지 설명을 입력하십시오


나는 동안 할 이 생각처럼, 당신은 Ajax 요청에 적합하지 않을 것이라는 점을 확인할 수 있을까?
— Mawg는 모니카

1
예, Ajax가 아닌 순수한 정적 PHP입니다.
— bueltge

그러나 페이지 본문에 HML / JS 코드를 추가하는 것 같습니다. 내 Ajax는 페이지 본문을 반환하지 않습니다. 죄송하지만, 도움을 요청 해 주셔서 감사합니다.
— Mawg는 Monica

1
ajax 호출을 요청하기 전에 헬퍼 기능을 트리거 한 다음 콘솔에 결과가 표시됩니다.
— bueltge

그래서 거기에 변수를 넣고 각 문자는 자체 줄로 끝났습니다. 왜 그렇게하는지 궁금해? 절대 사용 console.info
— yardpenalty.com

17

나는 그것이 사용될 수 있다고 생각합니다.

function jsLogs($data) {
    $html = "";
    $coll;

    if (is_array($data) || is_object($data)) {
        $coll = json_encode($data);
    } else {
        $coll = $data;
    }

    $html = "<script>console.log('PHP: ${coll}');</script>";

    echo($html);
    # exit();
}

# For String
jsLogs("testing string"); #PHP: testing string

# For Array
jsLogs(array("test1", "test2")); # PHP: ["test1","test2"]

# For Object
jsLogs(array("test1"=>array("subtest1", "subtest2"))); #PHP: {"test1":["subtest1","subtest2"]}

3
매우 정교한 것. 감사합니다 @Pankaj Bisht
— Vickar

2
순서대로 설명하겠습니다.
— Peter Mortensen

14

깊이를 더해주는 훌륭한 답변들; 하지만 JavaScript console.log()명령 과 같은 더 간단하고 더 많은 것이 필요했습니다 .

Ajax 애플리케이션에서 많은 "데이터 수집 및 XML로 변환"에서 PHP를 사용합니다. 이 경우 JavaScript console.log가 작동하지 않습니다. XML 출력을 중단합니다.

Xdebug 등에도 비슷한 문제가있었습니다.

Windows의 내 솔루션 :

  • .txt쓰기 쉽고 쓰기가 쉬운 파일 설정
  • 파일 error_log에서 PHP 변수를 설정하여 해당 .ini파일에 기록
  • Windows 파일 탐색기 에서 파일 을 열고 미리보기 창을 엽니 다
  • error_log('myTest');PHP 명령을 사용하여 메시지 보내기

이 솔루션은 단순하며 대부분의 요구를 충족시킵니다. 표준 PHP 및 미리보기 창은 PHP가 작성할 때마다 자동으로 업데이트됩니다.


메시지를 래핑해도 json_encode문제가 해결됩니까? 그렇다면 메시지 내의 인용 부호가 스크립트의 인용 부호를 방해했을 수 있습니다. (예 :) echo "<script>console.log(".json_encode($msg).")</script>";. 그렇지 않다면 console.log 스크립트가 중단 된 문제와 솔루션이 어떻게 / 왜 해결되었는지 궁금합니다. 귀하의 솔루션이 좋습니다 console.log-XML 출력을 중단 시킨 원인에 대해 더 배우려고합니다 . 많은 경우에 한 것처럼 오류 로그가 quick보다 훨씬 낫습니다 console.log.
— SherylHohman

13
$variable = "Variable";
echo "<script>console.log('$variable');</script>";

PHP와 자바 스크립트 상호 작용.


순서대로 설명하겠습니다. 정교하게 설명 할 수 있습니까 ( 댓글에 답하지 않고 답을 편집하여 )?
— Peter Mortensen

11

도움이된다고 생각합니다.

function console($data, $priority, $debug)
{
    if ($priority <= $debug)
    {
        $output = '<script>console.log("' . str_repeat(" ", $priority-1) . (is_array($data) ? implode(",", $data) : $data) . '");</script>';

        echo $output;
    }
}

그리고 그것을 다음과 같이 사용하십시오 :

<?php
    $debug = 5; // All lower and equal priority logs will be displayed
    console('Important', 1 , $debug);
    console('Less Important', 2 , $debug);
    console('Even Less Important', 5 , $debug);
    console('Again Important', 1 , $debug);
?>

콘솔의 어떤 출력 :

Important
 Less Important
     Even Less Important
Again Important

$ debug 값을 사용하여 덜 중요한 로그를 제한하여 끌 수 있습니다.


전화 console('Even Less Important' ,6 , $debug);하면 콘솔에 표시되지 않습니까? 왜 그래? 5 이상을 표시하지 않습니다
— HattrickNZ

2
@HattrickNZ 다른 수준의 로그 메시지를 가질 수 있습니다. 디버깅하는 경우 많은 정보와 함께 매우 복잡한 메시지 스트림을 표시하려고 할 수 있지만 정상적인 작업 중에 디버그를 1로 설정하면 가장 중요한 오류 / 로그 항목 만 표시됩니다. 코드를 작성할 때 중요한 항목을 결정하는 것은 사용자의 몫입니다.
— Toby Allen

OP는 HTML / js 콘솔이 아닌 표준 출력으로 인쇄하고 싶다고 말합니다.
— beppe9000

1
예, 그러나 반복되는 코드 (중복)는 리팩토링되어야합니다 : $output = '<script>console.log("' . str_repeat(" ", $priority-1)및 . '");</script>';. 단지 implode(",", $data)와 $data다르다.
— Peter Mortensen

1
@ 피터 모텐슨-실화! 이 4yo 게시물을 편집했습니다! :)
— zee

7

배열, 문자열 또는 객체의 경우 짧고 쉽습니다.

function console_log( $data ) {
  $output  = "<script>console.log( 'PHP debugger: ";
  $output .= json_encode(print_r($data, true));
  $output .= "' );</script>";
  echo $output;
}

1
OP는 HTML / js 콘솔이 아닌 서버 측 터미널 / 표준 출력으로 인쇄하고 싶다고 밝혔다.
— beppe9000

7
function phpconsole($label='var', $x) {
    ?>
    <script type="text/javascript">
        console.log('<?php echo ($label)?>');
        console.log('<?php echo json_encode($x)?>');
    </script>
    <?php
}

1
OP는 HTML / js 콘솔이 아닌 서버 측 터미널 / 표준 출력으로 인쇄하고 싶다고 밝혔다.
— beppe9000

7

JavaScript 콘솔이 아닌 PHP 로그 파일에 쓰려면 다음을 사용할 수 있습니다.

error_log("This is logged only to the PHP log")

참조 : error_log


그런 다음 그냥 ssh에 뛰어 들어 로그를 마무리하십시오
— Hayden Thring

6

Chrome의 경우 PHP 메시지를 기록 할 수있는 Chrome Logger 라는 확장이 있습니다.

Firefox DevTools 는 Chrome Logger 프로토콜을 통합 지원합니다. .

로깅을 활성화하려면 프로젝트에 'ChromePhp.php'파일 을 저장하면 됩니다. 그런 다음 다음과 같이 사용할 수 있습니다.

include 'ChromePhp.php';
ChromePhp::log('Hello console!');
ChromePhp::log($_SERVER);
ChromePhp::warn('something went wrong!');

GitHub 페이지 에서 가져온 예제 입니다.

출력 결과는 다음과 같습니다.

Firefox DevTools 내의 서버 로그


작곡가를 통해 설치할 수도 있습니다."ccampbell/chromephp": "*"
— padawanTony

5

다음 과 같은 작업 을 수행 할 수 있는 PHP 라이브러리 가 포함 된 훌륭한 Google Chrome 확장 프로그램 인 PHP Console도 있습니다.

  • Chrome JavaScript 콘솔 및 알림 팝업에서 오류 및 예외를 확인하십시오.
  • 모든 유형의 변수를 덤프하십시오.
  • 원격으로 PHP 코드를 실행하십시오.
  • 비밀번호로 액세스를 보호하십시오.
  • 요청별로 콘솔 로그를 그룹화하십시오.
  • error file:line텍스트 편집기로 이동 하십시오.
  • 오류 / 디버그 데이터를 클립 보드에 복사하십시오 (테스터 용).

1
PHP 오류, 예외 및 사용자 정의 디버깅 출력을 JS 콘솔에 쓰는 가장 선호하는 방법입니다. 나는 수년 동안 그것을 사용했습니다-매우 안정적이며 PHP 개정판으로 최신 상태를 유지했습니다. 나는 다른 것을 사용하지 않을 것입니다.
— Velojet

3

필자는 개발중인 WordPress 플러그인에서 코드를 디버깅하는 방법을 찾고 있었고이 게시물을 보았습니다.

다른 응답에서 나에게 가장 적합한 코드를 가져 와서 WordPress 디버깅에 사용할 수있는 함수로 결합했습니다. 기능은 다음과 같습니다

function debug_log($object=null, $label=null, $priority=1) {
    $priority = $priority<1? 1: $priority;
    $message = json_encode($object, JSON_PRETTY_PRINT);
    $label = "Debug" . ($label ? " ($label): " : ': ');
    echo "<script>console.log('" . str_repeat("-", $priority-1) . $label . "', " . $message . ");</script>";
}

사용법은 다음과 같습니다.

$txt = 'This is a test string';
$sample_array = array('cat', 'dog', 'pig', 'ant', 'fly');
debug_log($txt, '', 7);
debug_log($sample_array);

이 기능을 WordPress 개발에 사용하는 경우 해당 기능을 functions.php하위 테마 파일에 배치 한 다음 코드의 어느 곳에서나 호출 할 수 있습니다.


2

디버거 및 로거 에 찬성하여 위의 모든 것을 포기했습니다 . 나는 그것을 칭찬 할 수 없다!

오른쪽 상단의 탭 중 하나를 클릭하거나 "여기를 클릭하십시오"를 클릭하여 펼치거나 숨길 수 있습니다.

다른 "범주"를 주목하십시오. 배열을 클릭하여 확장 / 축소 할 수 있습니다.

웹 페이지에서

주요 특징:

  • 전역 변수 표시 ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE 등)
  • PHP 버전 및로드 된 확장 프로그램 표시
  • 내장 오류 처리기 PHP 교체
  • SQL 쿼리 로그
  • 코드 및 SQL 쿼리 실행 시간 모니터링
  • 변수가 변경되었는지 검사
  • 함수 호출 추적
  • 실행되는 스크립트의 라인을 확인하는 코드 범위 분석
  • 모든 유형의 변수 덤프
  • 소스 코드를 볼 수있는 코드 하이 라이터가있는 파일 관리자
  • Ajax 스크립트의 경우 JavaScript 콘솔 (Chrome 만 해당)에 메시지 보내기

여기에 이미지 설명을 입력하십시오


안녕하세요. 최신 포크 또는 유사한 도구가 최신 상태이며 현재 유지 관리되고 있습니까?
— Metafaniel

나는 그것을 코딩하지 않았으므로 최신 포크를 위해 GitHub에 가야한다고 생각합니까? 다른 방법은 softwarerecs.stackexchange.com에 문의 하면 도와 드리겠습니다.
— Mawg는 모니카

1
@MawgHi 감사합니다. phptoolcase Github 과 거기에 나열된 포크가 5 년 동안 업데이트되지 않았기 때문에 물었 습니다. 다른 StackExchange 사이트에 감사드립니다. 방금 Clockwork을 찾았습니다 . 그것이 비슷하거나 더 나은지 궁금합니다 ...
— Metafaniel

그리고 Clockwork에 감사 합니다 . 그것은 훌륭하게 보입니다 (프레임 워크를 사용하지 않는 것이 유감입니다 (프레임 워크를 연결하여 데이터베이스 쿼리를 덤프 할 수 있는지 궁금합니다)). 조사 할 가치가 있습니다. (+1)
— Mawg에 의하면 Monica Monica는


2

본문을 엉망으로 만들고 싶지 않은 Ajax 호출 또는 XML / JSON 응답의 경우 HTTP 헤더를 통해 로그를 전송 한 다음 웹 확장으로 콘솔에 추가해야합니다. Firefox에서 FirePHP (더 이상 사용할 수 없음)와 QuantumPHP (ChromePHP 포크)가이를 수행하는 방식입니다.

인내심이 있다면 x-debug가 더 나은 옵션입니다. 스크립트를 일시 중지하고 진행 상황을 확인한 다음 스크립트를 다시 시작하는 기능을 통해 PHP에 대한 심층적 인 통찰력을 얻을 수 있습니다.



2

파티에 늦을 수도 있지만 로깅 기능의 구현을 찾고있었습니다.

  • 자바 스크립트와 마찬가지로 가변 개수의 쉼표로 구분 된 인수를 사용합니다. console.log() .
  • 직렬화 된 문자열이 아닌 형식화 된 출력을 제공합니다.
  • 일반적인 자바 스크립트와 구별됩니다 console.log().

결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

(아래 스 니펫은 php에서 테스트되었습니다 7.2.11. PHP의 이전 버전과의 호환성에 대해 잘 모르겠습니다. console.log()인수 후에 후행 쉼표를 생성하기 때문에 (구식 브라우저의 경우) 자바 스크립트에서도 문제가 될 수 있습니다. 까지 법적 ES 2017.)

<?php

function console_log(...$args)
{
    $args_as_json = array_map(function ($item) {
        return json_encode($item);
    }, $args);

    $js_code = "<script>console.log('%c 💬 log from PHP: ','background: #474A8A; color: #B0B3D6; line-height: 2',";
    foreach ($args_as_json as $arg) {
        $js_code .= "{$arg},";
    }
    $js_code .= ")</script>";

    echo $js_code;
}

$list = ['foo', 'bar'];
$obj = new stdClass();
$obj->first_name = 'John';
$obj->last_name = 'Johnson';

echo console_log($list, 'Hello World', 123, $obj);

?>

이 발췌문은 저를 구했습니다. :) 실제 서버에 액세스하지 않고 프로덕션 코드를 약간 변경해야했으며이 문제를 해결하기에 완벽했습니다. 감사!
— Raphael Aleixo

도와 드리겠습니다.
— HynekS

1

이 두 가지 중 하나가 작동합니다.

<?php
    $five = 5;
    $six = 6;
?>
<script>
    console.log(<?php echo $five + $six ?>);
</script>


<?php
    $five = 5;
    $six = 6;
    echo("<script>console.log($five + $six);</script>");
?>

1

여기 내 해결책이 있습니다.이 것에 대한 좋은 점은 원하는만큼 많은 매개 변수를 전달할 수 있다는 것입니다.

function console_log()
{
    $js_code = 'console.log(' . json_encode(func_get_args(), JSON_HEX_TAG) .
        ');';
    $js_code = '<script>' . $js_code . '</script>';
    echo $js_code;
}

이런 식으로 불러

console_log('DEBUG>>', 'Param 1', 'Param 2');
console_log('Console DEBUG:', $someRealVar1, $someVar, $someArray, $someObj);

이제 콘솔에서 출력을 볼 수 있어야합니다.


0

사용하다:

function console_log($data) {
    $bt = debug_backtrace();
    $caller = array_shift($bt);

    if (is_array($data))
        $dataPart = implode(',', $data);
    else
        $dataPart = $data;

    $toSplit = $caller['file'])) . ':' .
               $caller['line'] . ' => ' . $dataPart

    error_log(end(split('/', $toSplit));
}

1
아이디어와 솔루션에 대한 힌트를 추가해야합니다. 또한 소스에 사용되지 않은 소스가 있습니다.
— bueltge

0

다음은 편리한 기능입니다. 사용하기 매우 간단하고, 원하는만큼 많은 인수를 전달할 수 있으며, JavaScript에서 console.log를 호출 한 것처럼 브라우저 콘솔 창에 객체 내용을 표시합니다.

'TAG-YourTag'를 전달하여 태그를 사용할 수도 있으며 다른 태그를 읽을 때까지 적용됩니다 (예 : 'TAG-YourNextTag').

/*
 *  Brief:         Print to console.log() from PHP
 *
 *  Description:   Print as many strings,arrays, objects, and
 *                 other data types to console.log from PHP.
 *
 *                 To use, just call consoleLog($data1, $data2, ... $dataN)
 *                 and each dataI will be sent to console.log - note
 *                 that you can pass as many data as you want an
 *                 this will still work.
 *
 *                 This is very powerful as it shows the entire
 *                 contents of objects and arrays that can be
 *                 read inside of the browser console log.
 *
 *                 A tag can be set by passing a string that has the
 *                 prefix TAG- as one of the arguments. Everytime a
 *                 string with the TAG- prefix is detected, the tag
 *                 is updated. This allows you to pass a tag that is
 *                 applied to all data until it reaches another tag,
 *                 which can then be applied to all data after it.
 *
 *                 Example:
 *
 *                 consoleLog('TAG-FirstTag', $data, $data2, 'TAG-SecTag, $data3);
 *
 *                 Result:
 *                     FirstTag '...data...'
 *                     FirstTag '...data2...'
 *                     SecTag   '...data3...'
 */
function consoleLog(){
    if(func_num_args() == 0){
        return;
    }

    $tag = '';
    for ($i = 0; $i < func_num_args(); $i++) {
        $arg = func_get_arg($i);
        if(!empty($arg)){
            if(is_string($arg) && strtolower(substr($arg, 0, 4)) === 'tag-'){
                $tag = substr($arg, 4);
            }else{
                $arg = json_encode($arg, JSON_HEX_TAG | JSON_HEX_AMP );
                echo "<script>console.log('" . $tag . " " . $arg . "');</script>";
            }
        }
    }
}

참고 : func_num_args () 및 func_num_args () 는 동적으로 많은 수의 입력 인수를 읽기위한 PHP 함수 이며이 함수가 한 번의 함수 호출에서 무한히 많은 console.log 요청을 가질 수 있도록합니다.


0

이것은 오래된 질문이지만 이것을 찾고 있습니다. 여기에 대답 한 일부 솔루션과 단일 크기의 모든 솔루션을 얻을 수있는 다른 아이디어가 있습니다.

코드 :

    // Post to browser console
    function console($data, $is_error = false, $file = false, $ln = false) {
        if(!function_exists('console_wer')) {
            function console_wer($data, $is_error = false, $bctr, $file, $ln) {
                echo '<div display="none">'.'<script type="text/javascript">'.(($is_error!==false) ? 'if(typeof phperr_to_cns === \'undefined\') { var phperr_to_cns = 1; document.addEventListener("DOMContentLoaded", function() { setTimeout(function(){ alert("Alert. see console."); }, 4000); });  }' : '').' console.group("PHP '.(($is_error) ? 'error' : 'log').' from "+window.atob("'.base64_encode((($file===false) ? $bctr['file'] : $file)).'")'.((($ln!==false && $file!==false) || $bctr!==false) ? '+" on line '.(($ln===false) ? $bctr['line'] : $ln).' :"' : '+" :"').'); console.'.(($is_error) ? 'error' : 'log').'('.((is_array($data)) ? 'JSON.parse(window.atob("'.base64_encode(json_encode($data)).'"))' : '"'.$data.'"').'); console.groupEnd();</script></div>'; return true;
            }
        }
        return @console_wer($data, $is_error, (($file===false && $ln===false) ? array_shift(debug_backtrace()) : false), $file, $ln);
    }

    //PHP Exceptions handler
    function exceptions_to_console($svr, $str, $file, $ln) {
        if(!function_exists('severity_tag')) {
            function severity_tag($svr) {
                $names = [];
                $consts = array_flip(array_slice(get_defined_constants(true)['Core'], 0, 15, true));
                foreach ($consts as $code => $name) {
                    if ($svr & $code) $names []= $name;
                }
                return join(' | ', $names);
            }
        }
        if (error_reporting() == 0) {
            return false;
        }
        if(error_reporting() & $svr) {
            console(severity_tag($svr).' : '.$str, true, $file, $ln);
        }
    }

    // Divert php error traffic
    error_reporting(E_ALL);  
    ini_set("display_errors", 1);
    set_error_handler('exceptions_to_console');

테스트 및 사용법 :

사용법이 간단합니다. 콘솔에 수동으로 게시하기위한 첫 번째 기능을 포함합니다. PHP 예외 처리를 전환하기 위해 두 번째 기능을 사용하십시오. 다음 테스트는 아이디어를 제공해야합니다.

    // Test 1 - Auto - Handle php error and report error with severity info
    $a[1] = 'jfksjfks';
    try {
          $b = $a[0];
    } catch (Exception $e) {
          echo "jsdlkjflsjfkjl";
    }

    // Test 2 - Manual - Without explicitly providing file name and line no.
          console(array(1 => "Hi", array("hellow")), false);

    // Test 3 - Manual - Explicitly providing file name and line no.
          console(array(1 => "Error", array($some_result)), true, 'my file', 2);

    // Test 4 - Manual - Explicitly providing file name only.
          console(array(1 => "Error", array($some_result)), true, 'my file');

설명 :

  • 이 함수 console($data, $is_error, $file, $fn)는 문자열 또는 배열을 첫 번째 인수로 사용하여 js 삽입을 사용하여 콘솔에 게시합니다.

  • 두 번째 인수는 일반 로그를 오류와 구별하기위한 플래그입니다. 오류가 발생하면 이벤트 리스너를 추가하여 오류가 발생하면 경고를 통해 알려주고 콘솔에서 강조 표시합니다. 이 플래그는 기본적으로 false로 설정됩니다.

  • 세 번째 및 네 번째 인수는 파일 및 줄 번호를 명시 적으로 선언 한 것으로 선택 사항입니다. 없는 경우 사전 정의 된 PHP 함수 debug_backtrace()를 사용하여 기본적 으로 가져옵니다.

  • 다음 함수 exceptions_to_console($svr, $str, $file, $ln)는 PHP 기본 예외 처리기에서 호출 한 순서대로 4 개의 인수를 갖습니다. 여기서 첫 번째 인수는 심각도이며, severity_tag($code)오류에 대한 자세한 정보를 제공하기 위해 함수 를 사용하여 미리 정의 된 상수로 추가 검사 합니다.

공지 사항 :

  • 위의 코드는 이전 브라우저에서는 사용할 수없는 JS 함수 및 메소드를 사용합니다. 이전 버전과의 호환성을 위해서는 교체가 필요합니다.

  • 위의 코드는 혼자 사이트에 액세스 할 수있는 테스트 환경을위한 것입니다. 라이브 (프로덕션) 웹 사이트에서는 이것을 사용하지 마십시오.

제안 :

  • 첫 번째 함수 console()는 몇 가지 통지를 던 졌으므로 다른 함수 내에 래핑하고 오류 제어 연산자 '@'를 사용하여 호출했습니다. 통지를 신경 쓰지 않으면 피할 수 있습니다.

  • 마지막으로, 경고 팝업이 코딩하는 동안 성 가실 수 있습니다. 이를 위해 팝업 경고 대신 이 경고음 (솔루션 : https://stackoverflow.com/a/23395136/6060602 )을 사용하고 있습니다. 꽤 시원하고 가능성은 무한합니다. 좋아하는 곡을 연주하고 스트레스를 덜 줄입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.