문자열을 쓰거나 콘솔에 로그인 할 수 있습니까?
내 말은
JSP에서와 같이 system.out.println("some")
, 우리와 같은 것을 인쇄 하면 페이지가 아닌 콘솔에 나타납니다.
문자열을 쓰거나 콘솔에 로그인 할 수 있습니까?
JSP에서와 같이 system.out.println("some")
, 우리와 같은 것을 인쇄 하면 페이지가 아닌 콘솔에 나타납니다.
답변:
Firefox
Firefox에서는 PHP 응용 프로그램에서 콘솔로 정보를 로깅하고 덤프 할 수있는 FirePHP 라는 확장명을 사용할 수 있습니다 . 이것은 멋진 웹 개발 확장 프로그램 Firebug 의 애드온 입니다.
크롬
그러나 Chrome을 사용하는 경우 Chrome Logger 또는 webug 라는 PHP 디버깅 도구 가 있습니다 (webug에 로그 순서에 문제가 있음).
보다 최근에는 Clockwork 가 활발히 개발 중이며 유용한 디버깅 및 프로파일 링 정보를 제공하기 위해 새 패널을 추가하여 개발자 도구를 확장합니다. Laravel 4 및 Slim 2에 대한 기본 지원을 제공 하며 확장 가능한 API를 통해 지원을 추가 할 수 있습니다.
Xdebug 사용
PHP를 디버깅하는 더 좋은 방법은 Xdebug를 사용하는 것 입니다. 대부분의 브라우저는 필요한 쿠키 / 쿼리 문자열을 전달하여 디버깅 프로세스를 초기화하는 데 도움이되는 도우미 확장을 제공합니다.
또는 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
"Debug Objects: " . $data . ""
$data
출력에가 나타나면 표시된대로 기능을 정확하게 입력하지 않은 것입니다. 작은 따옴표와 큰 따옴표를주의 깊게 살펴보고 위 코드와 일치하는지 확인하십시오. $data
PHP 변수입니다; 페이지가 브라우저로 전송 될 때까지 해당 php 변수는에 전달 된 매개 변수로 대체됩니다 debug_to_console
. 브라우저는 절대로 보이지 않아야합니다 $data
. ( page source
브라우저 에서 살펴보면 이라고 말하지 않아야합니다 $data
.)
간단한 접근 방식을 찾고 있다면 JSON으로 에코하십시오.
<script>
console.log(<?= json_encode($foo); ?>);
</script>
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>"; }
기본적으로 모든 출력은 stdout
스크립트가 Apache에 의해 실행되는지 또는 명령 행에서 수동으로 실행되는지에 따라 HTTP 응답 또는 콘솔입니다. 그러나 error_log
로깅에 사용할 수 있으며로 다양한 I / O 스트림 을 쓸 수 있습니다 fwrite
.
error_log
합니다. PHP 내장 웹 서버에서
다음을 시도하십시오. 작동 중입니다.
echo("<script>console.log('PHP: " . $data . "');</script>");
echo
"<div display='none'>
<script type='text/javascript'>
console.log('console log message');
</script>
</div>";
를 만듭니다
<div>
이랑
display="none"
div가 표시되지 않지만
console.log()
함수는 자바 스크립트로 생성됩니다. 콘솔에 메시지가 나타납니다.
div
. 당신은 단지이있는 경우 <script>
블록을, 아무것도 브라우저에 표시되지 않습니다.
json.encode
가 코드 행을 손상시키지 않도록 메시지를 호출로 랩핑하는 것이 좋습니다. 예를 들면 다음과 같습니다.echo "<script>console.log(".json_encode($msg).")</script>";
인기있는 답변 의 링크 된 웹 페이지 작성자 로서이 간단한 도우미 함수의 마지막 버전을 추가하고 싶습니다. 훨씬 더 견고합니다.
내가 사용하는 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);`
또한 훨씬 쉽게 이해할 수있는 이미지로 간단한 예를 들어보십시오.
나는 그것이 사용될 수 있다고 생각합니다.
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"]}
깊이를 더해주는 훌륭한 답변들; 하지만 JavaScript console.log()
명령 과 같은 더 간단하고 더 많은 것이 필요했습니다 .
Ajax 애플리케이션에서 많은 "데이터 수집 및 XML로 변환"에서 PHP를 사용합니다. 이 경우 JavaScript console.log
가 작동하지 않습니다. XML 출력을 중단합니다.
Xdebug 등에도 비슷한 문제가있었습니다.
Windows의 내 솔루션 :
.txt
쓰기 쉽고 쓰기가 쉬운 파일 설정error_log
에서 PHP 변수를 설정하여 해당 .ini
파일에 기록error_log('myTest');
PHP 명령을 사용하여 메시지 보내기이 솔루션은 단순하며 대부분의 요구를 충족시킵니다. 표준 PHP 및 미리보기 창은 PHP가 작성할 때마다 자동으로 업데이트됩니다.
json_encode
문제가 해결됩니까? 그렇다면 메시지 내의 인용 부호가 스크립트의 인용 부호를 방해했을 수 있습니다. (예 :) echo "<script>console.log(".json_encode($msg).")</script>";
. 그렇지 않다면 console.log 스크립트가 중단 된 문제와 솔루션이 어떻게 / 왜 해결되었는지 궁금합니다. 귀하의 솔루션이 좋습니다 console.log
-XML 출력을 중단 시킨 원인에 대해 더 배우려고합니다 . 많은 경우에 한 것처럼 오류 로그가 quick보다 훨씬 낫습니다 console.log
.
$variable = "Variable";
echo "<script>console.log('$variable');</script>";
PHP와 자바 스크립트 상호 작용.
도움이된다고 생각합니다.
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 이상을 표시하지 않습니다
$output = '<script>console.log("' . str_repeat(" ", $priority-1)
및 . '");</script>';
. 단지 implode(",", $data)
와 $data
다르다.
function phpconsole($label='var', $x) {
?>
<script type="text/javascript">
console.log('<?php echo ($label)?>');
console.log('<?php echo json_encode($x)?>');
</script>
<?php
}
JavaScript 콘솔이 아닌 PHP 로그 파일에 쓰려면 다음을 사용할 수 있습니다.
error_log("This is logged only to the PHP log")
참조 : error_log
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 페이지 에서 가져온 예제 입니다.
출력 결과는 다음과 같습니다.
"ccampbell/chromephp": "*"
다음 과 같은 작업 을 수행 할 수 있는 PHP 라이브러리 가 포함 된 훌륭한 Google Chrome 확장 프로그램 인 PHP Console도 있습니다.
error file:line
텍스트 편집기로 이동 하십시오.필자는 개발중인 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
하위 테마 파일에 배치 한 다음 코드의 어느 곳에서나 호출 할 수 있습니다.
디버거 및 로거 에 찬성하여 위의 모든 것을 포기했습니다 . 나는 그것을 칭찬 할 수 없다!
오른쪽 상단의 탭 중 하나를 클릭하거나 "여기를 클릭하십시오"를 클릭하여 펼치거나 숨길 수 있습니다.
다른 "범주"를 주목하십시오. 배열을 클릭하여 확장 / 축소 할 수 있습니다.
웹 페이지에서
주요 특징:
- 전역 변수 표시 ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE 등)
- PHP 버전 및로드 된 확장 프로그램 표시
- 내장 오류 처리기 PHP 교체
- SQL 쿼리 로그
- 코드 및 SQL 쿼리 실행 시간 모니터링
- 변수가 변경되었는지 검사
- 함수 호출 추적
- 실행되는 스크립트의 라인을 확인하는 코드 범위 분석
- 모든 유형의 변수 덤프
- 소스 코드를 볼 수있는 코드 하이 라이터가있는 파일 관리자
- Ajax 스크립트의 경우 JavaScript 콘솔 (Chrome 만 해당)에 메시지 보내기
2017 년부터 Firebug 및 FirePHP가 비활성화되었습니다 .
콘솔을 통한 디버깅을 위해 FirePHP에서 Firebug로 원활하게 마이그레이션 할 수 있도록 ChromePHP 도구를 약간 수정했습니다.
이 기사는 명확하고 쉬운 단계로 설명합니다
본문을 엉망으로 만들고 싶지 않은 Ajax 호출 또는 XML / JSON 응답의 경우 HTTP 헤더를 통해 로그를 전송 한 다음 웹 확장으로 콘솔에 추가해야합니다. Firefox에서 FirePHP (더 이상 사용할 수 없음)와 QuantumPHP (ChromePHP 포크)가이를 수행하는 방식입니다.
인내심이 있다면 x-debug가 더 나은 옵션입니다. 스크립트를 일시 중지하고 진행 상황을 확인한 다음 스크립트를 다시 시작하는 기능을 통해 PHP에 대한 심층적 인 통찰력을 얻을 수 있습니다.
파티에 늦을 수도 있지만 로깅 기능의 구현을 찾고있었습니다.
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);
?>
여기 내 해결책이 있습니다.이 것에 대한 좋은 점은 원하는만큼 많은 매개 변수를 전달할 수 있다는 것입니다.
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);
이제 콘솔에서 출력을 볼 수 있어야합니다.
사용하다:
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));
}
다음은 편리한 기능입니다. 사용하기 매우 간단하고, 원하는만큼 많은 인수를 전달할 수 있으며, 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 요청을 가질 수 있도록합니다.
이것은 오래된 질문이지만 이것을 찾고 있습니다. 여기에 대답 한 일부 솔루션과 단일 크기의 모든 솔루션을 얻을 수있는 다른 아이디어가 있습니다.
코드 :
// 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 )을 사용하고 있습니다. 꽤 시원하고 가능성은 무한합니다. 좋아하는 곡을 연주하고 스트레스를 덜 줄입니다.