Làm thế nào tôi có thể viết lên bàn điều khiển trong PHP?


324

Có thể viết một chuỗi hoặc đăng nhập vào giao diện điều khiển?

Ý tôi là

Giống như trong JSP, nếu chúng ta in một cái gì đó giống như system.out.println("some"), nó sẽ ở đó trên bàn điều khiển, không phải ở một trang.

Câu trả lời:


145

Firefox

Trên Firefox, bạn có thể sử dụng một tiện ích mở rộng có tên FirePHP cho phép ghi nhật ký và chuyển thông tin từ các ứng dụng PHP của bạn sang bàn điều khiển. Đây là một tiện ích bổ sung cho phần mở rộng phát triển web tuyệt vời Fireorms .

Trình duyệt Chrome

Tuy nhiên, nếu bạn đang sử dụng Chrome, có một công cụ gỡ lỗi PHP có tên là Chrome Logger hoặc webug (webug có vấn đề với thứ tự nhật ký).

Gần đây, Clockwork đang trong giai đoạn phát triển tích cực, mở rộng Công cụ dành cho nhà phát triển bằng cách thêm bảng điều khiển mới để cung cấp thông tin gỡ lỗi và lược tả hữu ích. Nó cung cấp hỗ trợ ngoài hộp cho Laravel 4Slim 2 và có thể thêm hỗ trợ thông qua API mở rộng của nó.

Sử dụng Xdebug

Một cách tốt hơn để gỡ lỗi PHP của bạn sẽ thông qua Xdebug . Hầu hết các trình duyệt cung cấp tiện ích mở rộng trợ giúp để giúp bạn vượt qua chuỗi cookie / truy vấn cần thiết để khởi tạo quy trình gỡ lỗi.


5
Ngoài ra còn có một phần mở rộng Safari để gỡ lỗi PHP có tên Xdebug Helper. Tôi đã cài đặt nó từ trang này: extensions.apple.com/#tab
Đánh dấu Mckelvie

3
Liên kết PHP cháy đã chết
Brian Leishman

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

4
OP nói rằng anh ấy muốn in ra đầu ra tiêu chuẩn, không phải vào bảng điều khiển html / js.
beppe9000

6
FirePHP chính thức chết.
TimSparrow

407

Hoặc bạn sử dụng thủ thuật từ PHP Debug đến console .

Trước tiên, bạn cần một hàm trợ giúp PHP nhỏ

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

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

Sau đó, bạn có thể sử dụng nó như thế này:

debug_to_console("Test");

Điều này sẽ tạo ra một đầu ra như thế này:

Debug Objects: Test

5
Trong FireFox v27, nó xuất ra"Debug Objects: " . $data . ""
Mawg nói rằng phục hồi lại vào

Cách duy nhất để làm cho điều này hữu ích hơn là thực hiện một cặp $ name: 'data' trong nhật ký. Chức năng tốt mặc dù.
Bắt buộc

10
@Mawg (và những người đã đưa ra nhận xét đó): Nếu $dataxuất hiện trong đầu ra, thì bạn đã không gõ chính xác chức năng như được hiển thị. Hãy xem xét kỹ các trích dẫn đơn và kép của bạn để đảm bảo chúng khớp với mã ở trên. $datalà một biến php; tại thời điểm trang được gửi tới trình duyệt, biến php đó sẽ được thay thế bằng tham số được truyền tới debug_to_console. Trình duyệt không bao giờ nên xem $data. (Nếu bạn nhìn vào page sourcetrình duyệt thì không nên nói $data.)
ToolmakerSteve

1
Cảm ơn cho gợi ý cho bài viết của tôi. Nhưng thời gian và kiến ​​thức đã thay đổi, chức năng cũng có;) Tôi có nó cập nhật ngay bây giờ.
bueltge

3
Vì vậy, nói cách khác, câu trả lời là: echo "<script> console.log ('Đối tượng gỡ lỗi:". $ Output. "'); </ Script>";
Christine

69

Nếu bạn đang tìm kiếm một cách tiếp cận đơn giản, hãy lặp lại dưới dạng JSON:

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

4
Điều này thêm một chút bối cảnh: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 nói rằng anh ấy muốn in ra đầu ra tiêu chuẩn, không phải vào bảng điều khiển html / js.
beppe9000

@ beppe9000 Điều đó không chính xác. OP hỏi liệu anh ta có thể viết từ PHP vào bàn điều khiển không. Trích dẫn: "Có thể viết chuỗi hoặc đăng nhập vào bàn điều khiển không?"
Dawson Irvine

với điều này, bạn có thể tránh var_dumps và tương tự. Hoạt động tuyệt vời và bảng điều khiển cho phép bạn chuyển đổi json một cách tốt đẹp.
Mbotet

41

Theo mặc định, tất cả đầu ra đi tới stdout, đó là phản hồi HTTP hoặc bàn điều khiển, tùy thuộc vào việc tập lệnh của bạn được chạy bởi Apache hay bằng tay trên dòng lệnh. Nhưng bạn có thể sử dụng error_logđể ghi nhật ký và các luồng I / O khác nhau có thể được ghi vào fwrite.


8
Cảm ơn, error_loglà những gì tôi cần để xuất ra thiết bị đầu cuối từ máy chủ web tích hợp PHP
Martín Coll

37

Hãy thử như sau. Nó đang làm việc:

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

5
Đây không phải là thời gian thực, vì php gửi tất cả các trang sau khi xử lý xong. Hơn nữa, nếu có lỗi trong tệp php, bạn sẽ không thấy bất kỳ nhật ký nào cả, bởi vì nó sẽ chỉ trả về một trang lỗi, do đó bỏ qua các bản in trước đó của bạn.
Miro Markaravanes

1
Tôi muốn chỉ ra rằng @MiroMarkaravanes hoàn toàn chính xác - các lỗi nghiêm trọng có thể ngăn giao diện điều khiển của bạn .log xuất ra trừ khi bạn đảm bảo xử lý / bắt từng lỗi có thể xảy ra. Đặc biệt là khi sử dụng bộ đệm đầu ra - nếu bộ đệm của bạn không hiển thị trên màn hình, thì đầu ra console.log của bạn cũng không. Đó là một cái gì đó để tâm trí.
whoshotdk

1
OP nói rằng anh ấy muốn in ra đầu ra tiêu chuẩn, không phải vào bảng điều khiển html / js.
beppe9000

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

Tạo ra một

<div>

với

display="none"

để div không được hiển thị, nhưng

console.log()

chức năng được tạo trong javascript. Vì vậy, bạn nhận được thông báo trong giao diện điều khiển.


3
Về mặt kỹ thuật, đây là câu trả lời đúng cho câu hỏi ban đầu - cách viết vào bảng điều khiển trình duyệt từ PHP. Nhưng tôi nghĩ tác giả đang cố gắng gỡ lỗi PHP để có những lựa chọn tốt hơn. Mặc dù vậy, nó không nên bị hạ thấp, nói đúng ra đây là một câu trả lời đúng.
Rolf

1
tôi chắc chắn chỉ tìm thấy nó vô cùng hữu ích!
albert

Giữ cho nó đơn giản, giải pháp này là tuyệt vời vì nó là tự giải thích. Đặc biệt là khi bạn có nhiều thứ để nhai cùng lúc với tôi đang trải qua bây giờ.
Olu Adabonyan

2
Tôi không hiểu tại sao bạn thậm chí cần một div. nếu bạn chỉ có một <script>khối, sẽ không có gì được hiển thị trong trình duyệt.
Kodos Johnson

1
Ngoài ra, nếu thông báo lỗi của bạn được lưu trữ trong một biến hoặc nếu nó chứa dấu ngoặc kép, bạn sẽ làm tốt việc bọc thông điệp trong một cuộc gọi để json.encodedấu ngoặc kép không phá vỡ dòng mã của bạn. Ví dụ:echo "<script>console.log(".json_encode($msg).")</script>";
SherylHohman

18

Là tác giả của trang web được liên kết trong câu trả lời phổ biến , tôi muốn thêm phiên bản cuối cùng của chức năng trợ giúp đơn giản này. Nó vững chắc hơn nhiều.

Tôi sử dụng json_encode()để thực hiện kiểm tra nếu loại biến không cần thiết và cũng thêm một bộ đệm để giải quyết các vấn đề với khung. Không có một sự trở lại vững chắc hoặc sử dụng quá mức 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;
}

Sử dụng

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

Ảnh chụp màn hình kết quả

Cũng là một ví dụ đơn giản như một hình ảnh để hiểu nó dễ dàng hơn nhiều:

Nhập mô tả hình ảnh ở đây


Trong khi tôi làm như ý tưởng này, bạn có thể xác nhận rằng nó sẽ không phù hợp với các yêu cầu Ajax?
Mawg nói rằng phục hồi Monica

1
Vâng, đó là php tĩnh thuần túy, không phải Ajax.
bueltge

Nhưng, dường như việc thêm mã HML / JS vào phần thân trang - và Ajax của tôi không trả về phần thân trang. Xin lỗi, nhưng tôi không hiểu và cố gắng giúp tôi
Mawg nói rằng hãy phục hồi lại

1
Bạn nên kích hoạt chức năng của trình trợ giúp trước khi yêu cầu cuộc gọi ajax, sau đó bạn cũng nhận được kết quả trong bảng điều khiển.
bueltge

Vì vậy, tôi đặt một biến trong đó và mỗi Nhân vật kết thúc trên dòng riêng của nó. Loại tò mò là tại sao nó làm điều đó? Không bao giờ sử dụng console.info
yardpenalty.com

17

Tôi nghĩ rằng nó có thể được sử dụng -

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
Rất tinh vi một. Cảm ơn @Pankaj Bisht
Vickar

2
Một lời giải thích sẽ theo thứ tự.
Peter Mortensen

14

Một số câu trả lời tuyệt vời mà thêm chiều sâu; nhưng tôi cần một cái gì đó đơn giản hơn và giống console.log()lệnh JavaScript hơn .

Tôi sử dụng PHP trong rất nhiều "thu thập dữ liệu và biến thành XML" trong các ứng dụng Ajax. JavaScript console.logkhông hoạt động trong trường hợp đó; nó phá vỡ đầu ra XML.

Xdebug, vv có vấn đề tương tự.

Giải pháp của tôi trong Windows:

  • Thiết lập một .txttệp có thể dễ dàng truy cập và ghi được
  • Đặt error_logbiến PHP trong .initệp để ghi vào tệp đó
  • Mở tệp trong Windows File Explorer và mở ngăn xem trước cho nó
  • Sử dụng error_log('myTest');lệnh PHP để gửi tin nhắn

Giải pháp này là đơn giản và đáp ứng nhu cầu của tôi hầu hết thời gian. PHP chuẩn và khung xem trước tự động cập nhật mỗi khi PHP ghi vào nó.


Sẽ gói tin nhắn trong json_encodecũng giải quyết vấn đề? Nếu vậy, có thể là dấu ngoặc kép trong thông điệp đã can thiệp vào dấu ngoặc kép trong tập lệnh. (ví dụ echo "<script>console.log(".json_encode($msg).")</script>";:). Nếu không, tôi tò mò vấn đề gì đã khiến tập lệnh console.log bị hỏng và làm thế nào / tại sao giải pháp của bạn khắc phục điều đó. Giải pháp của bạn rất tốt - Tôi chỉ đang cố gắng tìm hiểu thêm về các điều kiện gây ra console.loghoặc đầu ra xml bị phá vỡ. Trong nhiều trường hợp, một bản ghi lỗi như bạn đã làm tốt hơn nhiều so với nhanh chóng console.log.
SherylHohman


11

Tôi thấy điều này hữu ích:

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;
    }
}

Và sử dụng nó như:

<?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);
?>

Đầu ra nào trong giao diện điều khiển:

Important
 Less Important
     Even Less Important
Again Important

Và bạn có thể tắt các nhật ký ít quan trọng hơn bằng cách giới hạn chúng bằng cách sử dụng giá trị gỡ lỗi $.


Vì vậy, nếu bạn gọi console('Even Less Important' ,6 , $debug);điều này sẽ không được hiển thị trong giao diện điều khiển? tại sao vậy? là bất cứ thứ gì trên 5 không được hiển thị
HattrickNZ

2
@HattrickNZ Điều này là để cho phép bạn có các mức thông điệp tường trình khác nhau. Nếu bạn đang gỡ lỗi, bạn có thể muốn hiển thị một dòng thông báo rất trò chuyện với nhiều thông tin, tuy nhiên trong các hoạt động bình thường, bạn có thể đặt gỡ lỗi thành 1 để bạn chỉ nhận được các lỗi / mục nhật ký quan trọng nhất được hiển thị. Tùy thuộc vào bạn để quyết định những mục nào là quan trọng khi viết mã.
Toby Allen

OP nói rằng anh ấy muốn in ra đầu ra tiêu chuẩn, không phải vào bảng điều khiển html / js.
beppe9000

1
Có, nhưng mã lặp lại (dự phòng) - nên được cấu trúc lại: $output = '<script>console.log("' . str_repeat(" ", $priority-1). '");</script>';. Chỉ implode(",", $data)$datalà khác nhau.
Peter Mortensen

1
@Peter Mortensen - câu chuyện có thật! Đã chỉnh sửa bài này hơn 4yo! :)
zee

7

Ngắn và dễ dàng, cho các mảng, chuỗi hoặc cả các đối tượng.

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

1
OP nói rằng anh ấy muốn in ra thiết bị đầu cuối / đầu ra tiêu chuẩn phía máy chủ, chứ không phải vào bảng điều khiển 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 nói rằng anh ấy muốn in ra thiết bị đầu cuối / đầu ra tiêu chuẩn phía máy chủ, chứ không phải vào bảng điều khiển html / js.
beppe9000

7

Nếu bạn muốn ghi vào tệp nhật ký PHP và không phải bảng điều khiển JavaScript, bạn có thể sử dụng tệp này:

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

Tham khảo: error_log


Sau đó, chỉ cần nhảy vào ssh và theo dõi nhật ký
Hayden Thring

6

Đối với Chrome, có một tiện ích mở rộng có tên Chrome Logger cho phép ghi nhật ký các thông điệp PHP.

Firefox DevTools thậm chí còn hỗ trợ tích hợp cho giao thức Chrome Logger .

Để cho phép ghi nhật ký, bạn chỉ cần lưu tệp 'ChromePhp.php' trong dự án của bạn. Sau đó, nó có thể được sử dụng như thế này:

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

Ví dụ lấy từ trang GitHub .

Đầu ra có thể trông như thế này:

Nhật ký máy chủ trong Firefox DevTools


Bạn cũng có thể cài đặt nó qua trình soạn thảo:"ccampbell/chromephp": "*"
padawanTony

5

Ngoài ra còn có một tiện ích mở rộng tuyệt vời của Google Chrome, Bảng điều khiển PHP , với thư viện PHP cho phép bạn:

  • Xem lỗi và ngoại lệ trong bảng điều khiển Chrome JavaScript và trong cửa sổ bật lên thông báo.
  • Đổ bất kỳ loại biến.
  • Thực thi mã PHP từ xa.
  • Bảo vệ truy cập bằng mật khẩu.
  • Nhật ký bảng điều khiển nhóm theo yêu cầu.
  • Chuyển đến error file:linetrong trình soạn thảo văn bản của bạn.
  • Sao chép dữ liệu lỗi / gỡ lỗi vào bảng tạm (đối với người kiểm tra).

1
Phương pháp ưa thích của tôi để viết các lỗi PHP, ngoại lệ và đầu ra gỡ lỗi do người dùng định nghĩa vào bảng điều khiển JS. Tôi đã sử dụng nó trong nhiều năm - rất đáng tin cậy và cập nhật các bản sửa đổi PHP. Tôi sẽ không sử dụng bất cứ thứ gì khác.
Velojet

3

Tôi đang tìm cách gỡ lỗi mã trong một plugin WordPress mà tôi đang phát triển và tình cờ thấy bài đăng này.

Tôi đã lấy các đoạn mã có thể áp dụng nhất cho tôi từ các phản hồi khác và kết hợp chúng thành một chức năng mà tôi có thể sử dụng để gỡ lỗi WordPress. Chức năng là:

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>";
}

Cách sử dụng như sau:

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

Nếu chức năng này được sử dụng với sự phát triển của WordPress, thì chức năng này phải được đặt trong functions.phptệp của chủ đề con và sau đó có thể được gọi ở bất kỳ đâu trong mã.


2

Tôi đã từ bỏ tất cả những điều trên để ủng hộ Debugger & Logger . Tôi không thể khen ngợi nó đủ!

Chỉ cần nhấp vào một trong các tab ở trên cùng bên phải hoặc vào "nhấp vào đây" để mở rộng / ẩn.

Lưu ý các "danh mục" khác nhau. Bạn có thể nhấp vào bất kỳ mảng nào để mở rộng / thu gọn nó.

Từ trang web

Những đặc điểm chính:

  • Hiển thị các biến toàn cục ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE, v.v.)
  • Hiển thị phiên bản PHP và các phần mở rộng được tải
  • Thay thế PHP được xây dựng trong trình xử lý lỗi
  • Đăng nhập truy vấn SQL
  • Theo dõi mã thời gian và mã truy vấn SQL
  • Kiểm tra các biến để thay đổi
  • Chức năng gọi theo dõi
  • Phân tích phạm vi bảo hiểm để kiểm tra dòng kịch bản nào được thực thi
  • Kết xuất của tất cả các loại biến
  • Trình kiểm tra tệp với mã tô sáng để xem mã nguồn
  • Gửi tin nhắn đến bảng điều khiển JavaScript (chỉ dành cho Chrome), cho các tập lệnh Ajax

Nhập mô tả hình ảnh ở đây


Chào. Có một ngã ba mới nhất hoặc công cụ tương tự cập nhật hơn và hiện đang được duy trì?
Metafaniel

Tôi đã không mã hóa nó, vì vậy đối với ngã ba mới nhất, tôi đoán chỉ cần truy cập GitHub? Để thay thế, hãy hỏi tại softwarerecs.stackexchange.com và chúng tôi sẽ giúp bạn.
Mawg nói rằng phục hồi Monica

1
@MawgHi, cảm ơn. Tôi hỏi vì phithoolcase Github và các dĩa được liệt kê ở đó đã không được cập nhật trong 5 năm. Cảm ơn các trang web StackExchange khác. Tôi chỉ tìm thấy Clockwork . Tôi tự hỏi nếu nó tương tự hoặc tốt hơn ...
Metafaniel

Và cảm ơn bạn cho Clockwork. Nó trông thật tuyệt vời (thật đáng tiếc là tôi không sử dụng bất kỳ khung nào trong số đó (tôi tự hỏi liệu đó có phải là cách nó có thể loại bỏ các truy vấn cơ sở dữ liệu hay không - bằng cách nối khung)). Rất đáng để điều tra. (+1)
Mawg nói rằng phục hồi Monica


2

Đối với các cuộc gọi Ajax hoặc các phản hồi XML / JSON, nơi bạn không muốn gây rối với phần thân, bạn cần gửi nhật ký qua các tiêu đề HTTP, sau đó thêm chúng vào bảng điều khiển với tiện ích mở rộng web. Đây là cách FirePHP (không còn khả dụng) và QuantumPHP (một nhánh của ChromePHP) làm điều đó trong Firefox.

Nếu bạn có kiên nhẫn, x-debug là một lựa chọn tốt hơn - bạn hiểu sâu hơn về PHP, với khả năng tạm dừng tập lệnh của bạn, xem điều gì đang xảy ra, sau đó tiếp tục tập lệnh.



2

Tôi có thể bị trễ một bữa tiệc, nhưng tôi đang tìm kiếm một triển khai chức năng ghi nhật ký:

  • lấy một số lượng đối số được phân tách bằng dấu phẩy, giống như javascript console.log(),
  • đưa ra một đầu ra được định dạng (không chỉ là một chuỗi nối tiếp),
  • có thể phân biệt với một javascript thông thường console.log().

Vì vậy, đầu ra trông như thế:

nhập mô tả hình ảnh ở đây

(Đoạn mã dưới đây đã được thử nghiệm trên php 7.2.11. Tôi không chắc về khả năng tương thích ngược php của nó. Nó cũng có thể là một vấn đề đối với javascript (theo thuật ngữ của các trình duyệt cũ), vì nó tạo ra dấu phẩy sau các console.log()đối số - không phải là dấu phẩy hợp pháp cho đến khi 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);

?>

Đoạn trích này đã cứu tôi. :) Tôi cần thực hiện một số thay đổi trong mã sản xuất mà không cần truy cập vào các máy chủ thực tế và điều này là hoàn hảo để khắc phục nó. Cảm ơn!
Raphael Aleixo

Tôi vui vì tôi đã có thể giúp đỡ.
HynekS

1

Bất kỳ hai trong số này đang làm việc:

<?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

Đây là giải pháp của tôi, điều tốt về cái này là bạn có thể vượt qua bao nhiêu thông số tùy thích.

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

Gọi nó theo cách này

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

Bây giờ bạn sẽ có thể thấy đầu ra trong bảng điều khiển của mình, mã hóa vui vẻ :)


0

Sử dụng:

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
Bạn nên thêm một gợi ý về ý tưởng và giải pháp của bạn. Ngoài ra các nguồn có nguồn không sử dụng.
bueltge

0

Đây là một chức năng tiện dụng. Nó rất đơn giản để sử dụng, cho phép bạn chuyển bao nhiêu đối số tùy thích, dưới mọi hình thức và sẽ hiển thị nội dung đối tượng trong cửa sổ bảng điều khiển trình duyệt như thể bạn gọi là console.log từ JavaScript - nhưng từ PHP

Lưu ý, bạn cũng có thể sử dụng các thẻ bằng cách chuyển 'TAG-YourTag' và nó sẽ được áp dụng cho đến khi một thẻ khác được đọc, ví dụ: '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>";
            }
        }
    }
}

LƯU Ý: func_num_args ()func_num_args () là các hàm PHP để đọc số lượng đối số đầu vào động và cho phép hàm này có vô số yêu cầu console.log từ một lệnh gọi hàm.


0

Mặc dù đây là một câu hỏi cũ, tôi đã tìm kiếm nó. Dưới đây là tổng hợp của tôi về một số giải pháp đã được trả lời ở đây và một số ý tưởng khác được tìm thấy ở nơi khác để có được giải pháp một kích cỡ phù hợp cho tất cả.

MÃ:

    // 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');

KIỂM TRA & SỬ DỤNG:

Cách sử dụng rất đơn giản. Bao gồm chức năng đầu tiên để đăng lên bàn điều khiển bằng tay. Sử dụng chức năng thứ hai để chuyển hướng xử lý ngoại lệ php. Kiểm tra sau nên đưa ra một ý tưởng.

    // 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');

GIẢI TRÌNH :

  • Hàm console($data, $is_error, $file, $fn)lấy chuỗi hoặc mảng làm đối số đầu tiên và đăng nó lên bàn điều khiển bằng cách sử dụng js chèn.

  • Đối số thứ hai là một cờ để phân biệt các bản ghi bình thường chống lại lỗi. Đối với các lỗi, chúng tôi đang thêm các trình lắng nghe sự kiện để thông báo cho chúng tôi thông qua các cảnh báo nếu có bất kỳ lỗi nào được đưa ra, cũng nhấn mạnh trong bảng điều khiển. Cờ này được mặc định là sai.

  • Đối số thứ ba và thứ tư là khai báo rõ ràng về số tệp và số dòng, là tùy chọn. Nếu vắng mặt, họ được mặc định sử dụng hàm php được xác định trước debug_backtrace()để tìm nạp chúng cho chúng tôi.

  • Hàm tiếp theo exceptions_to_console($svr, $str, $file, $ln)có bốn đối số theo thứ tự được gọi bởi trình xử lý ngoại lệ mặc định của php. Ở đây, đối số đầu tiên là mức độ nghiêm trọng, chúng tôi tiếp tục kiểm tra chéo với các hằng số được xác định trước bằng cách sử dụng hàm severity_tag($code)để cung cấp thêm thông tin về lỗi.

ĐỂ Ý :

  • Mã trên sử dụng các hàm và phương thức JS không có sẵn trong các trình duyệt cũ hơn. Để tương thích với các phiên bản cũ hơn, nó cần thay thế.

  • Mã trên dành cho các môi trường thử nghiệm, nơi bạn một mình có quyền truy cập vào trang web. Không sử dụng điều này trong các trang web (sản xuất) trực tiếp.

BỀN VỮNG:

  • Hàm đầu tiên console()đã đưa ra một số thông báo, vì vậy tôi đã bọc chúng trong một hàm khác và gọi nó bằng toán tử kiểm soát lỗi '@'. Điều này có thể tránh được nếu bạn không bận tâm đến các thông báo.

  • Cuối cùng nhưng không kém phần quan trọng, các cảnh báo bật lên có thể gây khó chịu trong khi mã hóa. Đối với điều này, tôi đang sử dụng tiếng bíp này (tìm thấy trong giải pháp: https://stackoverflow.com/a/23395136/6060602 ) thay vì cảnh báo bật lên. Nó khá tuyệt và khả năng là vô tận, bạn có thể chơi những giai điệu yêu thích và làm cho việc viết mã bớt căng thẳng hơn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.