ฉันจะเขียนถึงคอนโซลใน PHP ได้อย่างไร?


324

เป็นไปได้ที่จะเขียนสตริงหรือเข้าสู่คอนโซลหรือไม่?

สิ่งที่ผมหมายถึง

เหมือนกับใน JSP ถ้าเราพิมพ์บางอย่างsystem.out.println("some")มันจะอยู่ที่คอนโซลไม่ใช่ที่หน้ากระดาษ

คำตอบ:


145

Firefox

บน Firefox คุณสามารถใช้ส่วนขยายที่เรียกว่าFirePHPซึ่งเปิดใช้งานการบันทึกและการทิ้งข้อมูลจากแอปพลิเคชัน PHP ของคุณไปยังคอนโซล นี่เป็นส่วนเสริมสำหรับFirebugส่วนขยายการพัฒนาเว็บที่ยอดเยี่ยม

โครเมียม

อย่างไรก็ตามหากคุณใช้ Chrome มีเครื่องมือดีบัก PHP ที่เรียกว่าChrome Loggerหรือwebug (webug มีปัญหาเกี่ยวกับลำดับของบันทึก)

เมื่อเร็ว ๆ นี้Clockworkกำลังอยู่ในระหว่างการพัฒนาซึ่งขยายเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์โดยเพิ่มแผงใหม่เพื่อให้ข้อมูลการดีบักและทำโปรไฟล์ที่มีประโยชน์ มันให้การสนับสนุนนอกกรอบสำหรับLaravel 4และSlim 2และสามารถเพิ่มการสนับสนุนผ่าน API ที่ขยายได้

ใช้ Xdebug

วิธีที่ดีกว่าการแก้ปัญหา PHP ของคุณจะผ่านXdebug เบราว์เซอร์ส่วนใหญ่จะให้ส่วนขยายผู้ช่วยเหลือเพื่อช่วยให้คุณผ่านสตริงคุกกี้ / แบบสอบถามที่ต้องการเพื่อเริ่มต้นกระบวนการแก้ไขข้อบกพร่อง


5
นอกจากนี้ยังมีส่วนขยาย Safari สำหรับการดีบัก PHP ที่เรียกว่า Xdebug Helper ฉันติดตั้งจากหน้านี้: Extensions.apple.com/#tab
Mark Mckelvie

3
ลิงก์ไฟของ PHP นั้นตายไปแล้ว
Brian 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 Debug ไปยังคอนโซล

ก่อนอื่นคุณต้องมีฟังก์ชั่นตัวช่วย 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 กล่าวว่าจะคืนสถานะโมนิก้า

วิธีเดียวที่จะทำให้สิ่งนี้มีประโยชน์มากขึ้นคือการทำตัวแปร $ name: 'data' pair ในบันทึก ฟังก์ชั่นที่ดีแม้ว่า
ความจำเป็น

10
@Mawg (และผู้ที่สนับสนุนความคิดเห็นนั้น): หาก$dataปรากฏในผลลัพธ์คุณจะไม่ได้พิมพ์ฟังก์ชันตามที่แสดง ดูอย่างรอบคอบที่เครื่องหมายคำพูดเดี่ยวและคู่ของคุณเพื่อให้แน่ใจว่าตรงกับรหัสด้านบน $dataเป็นตัวแปร php ตามเวลาที่หน้าถูกส่งไปยังเบราว์เซอร์, 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 ไปยังคอนโซลได้หรือไม่ อ้างอิง: "มันเป็นไปได้เขียนสตริงหรือเข้าสู่คอนโซล?"
Dawson Irvine

ด้วยวิธีนี้คุณสามารถหลีกเลี่ยง var_dumps และที่คล้ายกัน ใช้งานได้ดีและคอนโซลช่วยให้คุณสลับ json ในวิธีที่ดี
Mbotet

41

ตามค่าดีฟอลต์แล้วเอาต์พุตทั้งหมดจะไปที่stdoutซึ่งเป็นการตอบสนอง HTTP หรือคอนโซลขึ้นอยู่กับว่าสคริปต์ของคุณรันโดย Apache หรือด้วยตนเองในบรรทัดคำสั่ง แต่คุณสามารถใช้error_logสำหรับการบันทึกและสตรีม I / O ต่างๆสามารถเขียนไปด้วยfwriteได้


8
ขอบคุณerror_logฉันต้องส่งออกไปยังเทอร์มินัลจากเว็บเซิร์ฟเวอร์ในตัว PHP
Martín Coll

37

ลองทำสิ่งต่อไปนี้ มันใช้งานได้:

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

5
นี่ไม่ใช่เวลาจริงเนื่องจาก php ส่งหน้าทั้งหมดเมื่อการประมวลผลเสร็จสิ้น นอกจากนี้หากมีข้อผิดพลาดในไฟล์ php คุณจะไม่เห็นบันทึกใด ๆ เลยเพราะจะส่งคืนหน้าข้อผิดพลาดเท่านั้นดังนั้นจึงไม่สนใจงานพิมพ์ก่อนหน้านี้
Miro Markaravanes

1
ฉันต้องการจะชี้ให้เห็นว่า @MiroMarkaravanes ถูกต้องอย่างแน่นอน - ข้อผิดพลาดร้ายแรงสามารถป้องกัน 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);`

สกรีนช็อตของผลลัพธ์

นอกจากนี้ยังมีตัวอย่างง่ายๆเป็นภาพเพื่อให้เข้าใจได้ง่ายขึ้น:

ป้อนคำอธิบายภาพที่นี่


ในขณะที่ฉันทำชอบความคิดนี้คุณสามารถยืนยันว่ามันจะไม่เหมาะสำหรับการร้องขออาแจ็กซ์?
Mawg กล่าวว่าคืนสถานะโมนิก้า

1
ใช่มันเป็น php คงที่บริสุทธิ์ไม่ใช่อาแจ็กซ์
bueltge

แต่ดูเหมือนว่าการเพิ่มรหัส HML / JS เป็นส่วนหนึ่งของหน้า - และ Ajax ของฉันจะไม่ส่งคืนเนื้อหาของหน้า ขออภัย แต่ฉันไม่ได้ทำตาม & thansk สำหรับพยายาม ot ช่วยฉัน
Mawg พูดว่าคืนสถานะโมนิก้า

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

บางคำตอบที่ยอดเยี่ยมที่เพิ่มความลึกมากขึ้น แต่ฉันต้องการบางสิ่งที่ง่ายขึ้นและมากขึ้นเช่นconsole.log()คำสั่งJavaScript

ฉันใช้ PHP ใน "การรวบรวมข้อมูลและเปลี่ยนเป็น XML" ในแอปพลิเคชัน Ajax JavaScript console.logไม่ทำงานในกรณีนั้น มันแบ่งเอาท์พุท XML

Xdebug ฯลฯ มีปัญหาที่คล้ายกัน

โซลูชันของฉันใน Windows:

  • ติดตั้ง.txtไฟล์ที่ง่ายต่อการเข้าถึงและเขียนได้
  • ตั้งค่าerror_logตัวแปรPHP ใน.iniไฟล์เพื่อเขียนไปยังไฟล์นั้น
  • เปิดไฟล์ใน Windows File Explorerและเปิดบานหน้าต่างแสดงตัวอย่าง
  • ใช้error_log('myTest');คำสั่ง PHP เพื่อส่งข้อความ

วิธีนี้ง่ายและตรงกับความต้องการของฉันส่วนใหญ่ PHP มาตรฐานและบานหน้าต่างแสดงตัวอย่างจะอัปเดตโดยอัตโนมัติทุกครั้งที่ PHP เขียนถึง


การห่อข้อความในการjson_encodeแก้ปัญหาด้วยหรือไม่ หากเป็นเช่นนั้นอาจเป็นเครื่องหมายอัญประกาศที่อยู่ในข้อความที่รบกวนเครื่องหมายอัญประกาศในสคริปต์ (ตัวอย่างเช่น: echo "<script>console.log(".json_encode($msg).")</script>";) ถ้าไม่ฉันอยากรู้ว่าปัญหาคืออะไรที่ทำให้สคริปต์ console.log หยุดทำงานและวิธีการแก้ปัญหาของคุณได้รับการแก้ไขอย่างไร วิธีแก้ปัญหาของคุณดี - ฉันแค่พยายามเรียนรู้เพิ่มเติมเกี่ยวกับเงื่อนไขที่ทำให้console.logหรือเอาต์พุต XML หยุดพัก console.logในหลายกรณีบันทึกข้อผิดพลาดที่คุณทำจะดีกว่าอย่างรวดเร็ว
SherylHohman

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

ปฏิสัมพันธ์ระหว่าง PHP และ JavaScript


คำอธิบายจะอยู่ในลำดับ คุณสามารถทำอย่างละเอียด ( โดยการแก้ไขคำตอบของคุณไม่ใช่โดยการตอบในความคิดเห็น)?
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
ใช่ แต่รหัสซ้ำ (ซ้ำซ้อน) - ควรจะ refactored: และ$output = '<script>console.log("' . str_repeat(" ", $priority-1) . '");</script>';เท่านั้นimplode(",", $data)และ$dataแตกต่างกัน
Peter Mortensen

1
@ Peter Mortensen - เรื่องจริง! แก้ไขโพสต์นี้ด้วย 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

ถ้าคุณต้องการเขียนไปยังล็อกไฟล์ PHP ไม่ใช่คอนโซล JavaScript คุณสามารถใช้สิ่งนี้:

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

การอ้างอิง: error_log


จากนั้นเพียงแค่กระโดดลงใน ssh และตัดบันทึก
Hayden Thring

6

สำหรับ Chrome มีส่วนเสริมที่เรียกว่าChrome Loggerช่วยให้สามารถบันทึกข้อความ PHP ได้

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

นอกจากนี้ยังมีส่วนขยายที่ยอดเยี่ยมของ Google Chrome, PHP Consoleพร้อมห้องสมุด PHPที่ช่วยให้คุณ:

  • ดูข้อผิดพลาดและข้อยกเว้นในคอนโซล 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

ฉันได้ละทิ้งทุกอย่างที่กล่าวในความโปรดปรานของการดีบักเกอร์ & Logger ฉันสรรเสริญไม่พอ!

เพียงคลิกที่หนึ่งในแท็บที่ด้านบนขวาหรือที่ "คลิกที่นี่" เพื่อขยาย / ซ่อน

สังเกตเห็น "หมวดหมู่" ที่แตกต่างกัน คุณสามารถคลิกอาร์เรย์ใดก็ได้เพื่อขยาย / ยุบได้

จากหน้าเว็บ

คุณสมบัติหลัก:

  • แสดงตัวแปรแบบกลม ($ GLOBALS, $ _POST, $ _GET, $ _COOKIE, ฯลฯ )
  • แสดงเวอร์ชัน PHP และส่วนขยายที่โหลด
  • แทนที่ PHP ในตัวจัดการข้อผิดพลาด
  • บันทึกแบบสอบถาม SQL
  • รหัสตรวจสอบและเวลาดำเนินการสืบค้น SQL
  • ตรวจสอบตัวแปรสำหรับการเปลี่ยนแปลง
  • ฟังก์ชั่นการติดตามการโทร
  • การวิเคราะห์ความครอบคลุมรหัสเพื่อตรวจสอบบรรทัดของสคริปต์ที่ดำเนินการ
  • ดัมพ์ของตัวแปรทุกชนิด
  • ตัวตรวจสอบไฟล์พร้อมปากกาเน้นข้อความเพื่อดูซอร์สโค้ด
  • ส่งข้อความไปยังคอนโซล JavaScript (Chrome เท่านั้น) สำหรับสคริปต์ Ajax

ป้อนคำอธิบายภาพที่นี่


สวัสดี มีส้อมใหม่ล่าสุดหรือเครื่องมือที่คล้ายกันมากขึ้นและทันสมัยอยู่ในปัจจุบัน?
Metafaniel

ฉันไม่ได้เขียนมันดังนั้นสำหรับคนใหม่ฉันคิดว่าแค่ไปที่ GitHub? สำหรับทางเลือกอื่นกรุณาสอบถามที่softwarerecs.stackexchange.comและเราจะช่วยเหลือคุณ
Mawg กล่าวว่าคืนสถานะโมนิก้า

1
@Mawg สวัสดีขอบคุณ ฉันถามเพราะphptoolcase Githubและส้อมที่ระบุไม่มีการอัพเดทใน 5 ปี ขอบคุณสำหรับเว็บไซต์ StackExchange อื่น ๆ ฉันเพิ่งพบลาน ฉันสงสัยว่ามันเป็นที่คล้ายกันหรือดีกว่า ...
Metafaniel

และขอขอบคุณคุณสำหรับลาน มันดูยอดเยี่ยม (น่าเสียดายที่ฉันไม่ได้ใช้เฟรมเวิร์กเหล่านั้น (ฉันสงสัยว่านั่นเป็นวิธีที่จะถ่ายโอนข้อมูลเคียวรีฐานข้อมูล - โดยการเชื่อมโยงเฟรมเวิร์ก)) คุ้มค่ากับการตรวจสอบ (+1)
Mawg กล่าวว่าคืนสถานะโมนิก้า

2

ในฐานะของปี 2017 และด้วยเหตุนี้ Firebug FirePHP ถูกปิดใช้งาน

ฉันเขียนการแก้ไขเล็กน้อยเพื่อเครื่องมือ ChromePHP เพื่อให้การโยกย้ายที่ราบรื่นจาก FirePHP ไปยัง Firebug สำหรับการดีบักผ่านคอนโซล

บทความนี้อธิบายในขั้นตอนง่าย ๆ ที่ชัดเจน

โยกย้ายจาก FirePHP ไปยัง ChromePHP ใน 5 นาที (โดยไม่ทำลายโค้ดที่มีอยู่)


2

สำหรับการโทร Ajax หรือการตอบสนอง XML / JSON ที่คุณไม่ต้องการยุ่งกับเนื้อหาคุณต้องส่งบันทึกผ่านส่วนหัว HTTP จากนั้นเพิ่มลงในคอนโซลด้วยส่วนขยายของเว็บ นี่คือวิธีที่ FirePHP (ไม่มีแล้ว) และ QuantumPHP (แยก ChromePHP) ทำใน Firefox

หากคุณมีความอดทน x-debug เป็นตัวเลือกที่ดีกว่า - คุณจะได้รับข้อมูลเชิงลึกเกี่ยวกับ PHP มากขึ้นด้วยความสามารถในการหยุดสคริปต์ของคุณชั่วคราวดูว่ามีอะไรเกิดขึ้นบ้างแล้วดำเนินการสคริปต์ต่อ


FirePHP จะไม่ทำงาน
Peter Mortensen

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

นี่คือทางออกของฉันสิ่งที่ดีเกี่ยวกับอันนี้คือคุณสามารถส่งผ่าน params ได้มากเท่าที่คุณต้องการ

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

นี่คือฟังก์ชั่นที่ใช้งานง่าย มันใช้งานง่ายสุดช่วยให้คุณสามารถส่งอาร์กิวเมนต์ได้มากเท่าที่คุณต้องการและจะแสดงเนื้อหาของวัตถุในหน้าต่างคอนโซลของเบราว์เซอร์ราวกับว่าคุณเรียกว่า console.log จาก JavaScript - แต่จาก PHP

หมายเหตุคุณสามารถใช้แท็กได้เช่นกันโดยผ่าน '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 แทรก

  • อาร์กิวเมนต์ที่สองคือการตั้งค่าสถานะเพื่อแยกบันทึกปกติจากข้อผิดพลาด สำหรับข้อผิดพลาดเรากำลังเพิ่มตัวรับฟังเหตุการณ์เพื่อแจ้งให้เราทราบผ่านการแจ้งเตือนหากมีข้อผิดพลาดเกิดขึ้นรวมถึงการเน้นในคอนโซล การตั้งค่าสถานะนี้เป็นค่าเริ่มต้นเป็นเท็จ

  • อาร์กิวเมนต์ที่สามและสี่เป็นการประกาศที่ชัดเจนของไฟล์และหมายเลขบรรทัดซึ่งเป็นทางเลือก หากขาดไปพวกเขาจะใช้ฟังก์ชัน php ที่กำหนดไว้ล่วงหน้าdebug_backtrace()เพื่อดึงข้อมูลให้เรา

  • ฟังก์ชันถัดไปexceptions_to_console($svr, $str, $file, $ln)มีสี่อาร์กิวเมนต์ตามลำดับที่เรียกโดยตัวจัดการข้อยกเว้นเริ่มต้นของ php ที่นี่อาร์กิวเมนต์แรกคือความรุนแรงซึ่งเรา crosscheck เพิ่มเติมด้วยค่าคงที่กำหนดไว้ล่วงหน้าโดยใช้ฟังก์ชั่นseverity_tag($code)เพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด

ประกาศ:

  • โค้ดด้านบนใช้ฟังก์ชั่น JS และวิธีการที่ไม่สามารถใช้ได้ในเบราว์เซอร์รุ่นเก่า เพื่อความเข้ากันได้กับรุ่นที่เก่ากว่านั้นจะต้องมีการเปลี่ยน

  • โค้ดด้านบนใช้สำหรับทดสอบสภาพแวดล้อมซึ่งคุณเพียงคนเดียวสามารถเข้าถึงไซต์ได้ อย่าใช้สิ่งนี้ในเว็บไซต์สด (การผลิต)

คำแนะนำ:

  • ฟังก์ชั่นแรกconsole()ขว้างประกาศไปฉันก็เลยใส่มันเข้าไปในฟังก์ชั่นอื่นแล้วเรียกมันว่าใช้ตัวดำเนินการควบคุมข้อผิดพลาด '@' สิ่งนี้สามารถหลีกเลี่ยงได้หากคุณไม่ได้ใส่ใจกับการแจ้งเตือน

  • สุดท้าย แต่ไม่ท้ายสุดการแจ้งเตือนการเปิดหน้าต่างอาจทำให้เกิดความรำคาญในขณะที่เข้ารหัส สำหรับสิ่งนี้ฉันใช้บี๊ปนี้ (พบในโซลูชัน: https://stackoverflow.com/a/23395136/6060602 ) แทนการแจ้งเตือนป๊อปอัพ มันเจ๋งมากและความเป็นไปได้ไม่มีที่สิ้นสุดคุณสามารถเล่นเพลงโปรดของคุณและทำให้การเขียนโค้ดลดความตึงเครียดลงได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.