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


324

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

내 말은

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

답변:


145

Firefox

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

크롬

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

보다 최근에는 Clockwork 가 활발히 개발 중이며 유용한 디버깅 및 프로파일 링 정보를 제공하기 위해 새 패널을 추가하여 개발자 도구를 확장합니다. Laravel 4Slim 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.