কীভাবে আমি পিএইচপি-তে কনসোলে লিখতে পারি?


322

এটি কি স্ট্রিং লিখতে বা কনসোলে লগইন করা সম্ভব?

আমি যা বলতে চাইছি

ঠিক যেমন জেএসপি-তে, আমরা যদি এমন কিছু মুদ্রণ করি তবে system.out.println("some")এটি কোনও পৃষ্ঠায় নয়, কনসোলে থাকবে।

উত্তর:


145

ফায়ারফক্স

ফায়ারফক্সে আপনি ফায়ারএইচপিপি নামে একটি এক্সটেনশন ব্যবহার করতে পারেন যা আপনার পিএইচপি অ্যাপ্লিকেশনগুলি থেকে কনসোলে তথ্য লগিং এবং ডাম্পিং সক্ষম করে। এটি দুর্দান্ত ওয়েব ডেভলপমেন্ট এক্সটেনশন ফায়ারব্যাগের একটি সংযোজন ।

ক্রৌমিয়াম

তবে আপনি যদি ক্রোম ব্যবহার করছেন তবে ক্রোম লগার বা ওয়েবগ নামে একটি পিএইচপি ডিবাগিং সরঞ্জাম রয়েছে (লগের ক্রম নিয়ে ওয়েবগের সমস্যা আছে)।

সম্প্রতি ক্লকওয়ার্ক সক্রিয় বিকাশে রয়েছে যা দরকারী ডিবাগিং এবং প্রোফাইলিং তথ্য সরবরাহ করতে একটি নতুন প্যানেল যুক্ত করে বিকাশকারী সরঞ্জামগুলি প্রসারিত করে। এটি লারাভেল 4 এবং স্লিম 2 এর জন্য বক্স সমর্থন সরবরাহ করে এবং এর এক্সটেনসিবল এপিআইয়ের মাধ্যমে সমর্থন যোগ করা যেতে পারে।

এক্সডিবাগ ব্যবহার করা হচ্ছে

আপনার পিএইচপি ডিবাগ করার একটি ভাল উপায় Xdebug মাধ্যমে হবে । বেশিরভাগ ব্রাউজারগুলি ডিবাগিং প্রক্রিয়াটি আরম্ভ করার জন্য প্রয়োজনীয় কুকি / কোয়েরি স্ট্রিংটি পাস করতে সহায়তা করার জন্য সহায়ক এক্সটেনশান সরবরাহ করে।


5
এক্সডিবাগ হেল্পার নামে পরিচিত ডিবাগ করার জন্য একটি সাফারি এক্সটেনশন রয়েছে। আমি এই পৃষ্ঠাটি থেকে এটি ইনস্টল করেছি: এক্সটেনশনস.এপল.
com/#tab

3
ফায়ার পিএইচপি লিঙ্কটি মারা গেছে
ব্রায়ান লেশম্যান

9
প্রতিধ্বনি "<script> কনসোল.লগ ('পিএইচপি:',", get_option ("স্লাইড_ডেটা"), "); </ স্ক্রিপ্ট>";
আজমত করিম খান

4
ওপিতে বলা হয়েছে যে তিনি এইচটিএমএল / জেএস কনসোলকে নয়, স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করতে চেয়েছিলেন।
beppe9000

6
ফায়ারএইচপি সরকারিভাবে মারা গেছে।
টিমস্প্যারো

405

বা কনসোল করার জন্য আপনি পিএইচপি ডিবাগ থেকে কৌশলটি ব্যবহার করেন ।

প্রথমে আপনার একটু পিএইচপি সহায়তা ফাংশন প্রয়োজন

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
ফায়ারফক্স "Debug Objects: " . $data . ""
v27-এ

এটিকে আরও কার্যকর করার একমাত্র উপায় হ'ল লগতে একটি পরিবর্তনশীল $ name: 'ডেটা' জোড়া করা। ভাল কাজ যদিও।
ইমপ্রেশনাল

10
@ মাওগ (এবং যারা মন্তব্যটি সমর্থন করেছেন): যদি $dataআউটপুটে উপস্থিত হয়, তবে আপনি ঠিক মতো ফাংশনটি টাইপ করেননি। উপরের কোডটি মিলছে কিনা তা নিশ্চিত করার জন্য আপনার একক এবং ডাবল উদ্ধৃতিগুলি সাবধানতার সাথে দেখুন। $dataএকটি পিএইচপি পরিবর্তনশীল; পৃষ্ঠাটি ব্রাউজারে প্রেরণের সময়, পিএইচপি ভেরিয়েবলটি প্যারামিটার দ্বারা প্রতিস্থাপন করা হবে debug_to_console। ব্রাউজারটি কখনও দেখা উচিত নয় $data। (আপনি যদি page sourceব্রাউজারে লক্ষ্য করেন তবে এটি বলা উচিত নয় $data))
টুলমেকারস্টেভ

1
আমার পোস্টে ইঙ্গিত দেওয়ার জন্য ধন্যবাদ। তবে সময় এবং জ্ঞানের পরিবর্তন হয়েছে, ফাংশনটিও;) আমার এখন এটি আপডেট হয়েছে।
বেলজ

3
সুতরাং, অন্য কথায়, উত্তরটি হ'ল: প্রতিধ্বনি "<script> কনসোল.লগ ('ডিবাগ অবজেক্টস:"। $ আউটপুট। ""); </ translation> ";
ক্রিস্টিন

68

যদি আপনি একটি সহজ পদ্ধতির সন্ধান করেন তবে জেএসএন হিসাবে প্রতিধ্বনিত করুন:

<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>"; }
রব্রেকর্ড

ওপিতে বলা হয়েছে যে তিনি এইচটিএমএল / জেএস কনসোলকে নয়, স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করতে চেয়েছিলেন।
beppe9000

@ beppe9000 এটি ভুল। ওপি জিজ্ঞাসা করে যে তিনি পিএইচপি থেকে কনসোলে লিখতে পারেন কিনা। উদ্ধৃতি: "এটি কি স্ট্রিং লিখতে বা কনসোলে লগইন করা সম্ভব?"
ডসন ইরভিন

এটির সাহায্যে আপনি var_dumps এবং অনুরূপ এড়াতে পারবেন। দুর্দান্ত কাজ করে এবং কনসোল আপনাকে একটি দুর্দান্ত উপায়ে জসনটি টগল করতে দেয়।
এমবোটেট

41

ডিফল্টরূপে, সমস্ত আউটপুট যায় stdoutযা আপনার স্ক্রিপ্ট অ্যাপাচি দ্বারা চালিত হয় বা কমান্ড লাইনে ম্যানুয়ালি চালিত হয় তার উপর নির্ভর করে HTTP প্রতিক্রিয়া বা কনসোল। তবে আপনি error_logলগিংয়ের জন্য ব্যবহার করতে পারেন এবং বিভিন্ন আই / ও স্ট্রিমগুলির সাথে লিখিত হতে পারে fwrite


8
ধন্যবাদ, পিএইচপি অন্তর্নির্মিত ওয়েব সার্ভারerror_log থেকে টার্মিনালে আউটপুট দেওয়ার জন্য আমার যা দরকার ছিল
মার্টন কোল

37

নিম্নলিখিত চেষ্টা করুন। এটি কাজ করছে:

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

5
এটি খুব আসল সময় নয়, যেহেতু পিএইচপি সমস্ত পৃষ্ঠাটি প্রক্রিয়াকরণ শেষ হওয়ার পরে প্রেরণ করে। তদ্ব্যতীত, পিএইচপি ফাইলে যদি কোনও ত্রুটি থাকে তবে আপনি কোনও লগ দেখতে পাবেন না, কারণ এটি কেবল ত্রুটি পৃষ্ঠাতে ফিরে আসবে, এইভাবে আপনার পূর্ববর্তী প্রিন্টগুলি উপেক্ষা করে।
মিরো মার্কারভনেস

1
আমি উল্লেখ করতে চাই যে @ মিরোমারকারাভানিজ একেবারে সঠিক - মারাত্মক ত্রুটিগুলি আপনার কনসোল.লগকে আউটপুট থেকে আটকাতে পারে যদি না আপনি প্রতিটি একক সম্ভাব্য ত্রুটি পরিচালনা / ধরা নিশ্চিত করেন না। বিশেষত আউটপুট বাফারিং ব্যবহার করার সময় - যদি আপনার বাফার এটি স্ক্রিনে না করে তবে আপনার কনসোল.লগ আউটপুটও দেয় না। এটা মনে রাখা কিছু।
whoshotdk

1
ওপিতে বলা হয়েছে যে তিনি এইচটিএমএল / জেএস কনসোলকে নয়, স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করতে চেয়েছিলেন।
beppe9000

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

তৈরি করে a

<div>

সাথে

display="none"

যাতে ডিভ প্রদর্শিত হয় না, তবে

console.log()

ফাংশন জাভাস্ক্রিপ্ট তৈরি করা হয়। সুতরাং আপনি কনসোলে বার্তাটি পান।


3
প্রযুক্তিগতভাবে এটি প্রাথমিক প্রশ্নের সঠিক উত্তর - পিএইচপি থেকে ব্রাউজার কনসোলে কীভাবে লিখবেন। তবে আমি মনে করি লেখক পিএইচপি ডিবাগ করার চেষ্টা করছেন তাই আরও ভাল বিকল্প রয়েছে। যদিও এটি কমানো উচিত নয়, কঠোরভাবে বললে এটি সঠিক উত্তর।
রল্ফ

1
আমি অবশ্যই এটি অবিশ্বাস্যভাবে সহায়ক খুঁজে পেয়েছি!
আলবার্ট

এটিকে সহজ করে বললে, এই সমাধানটি দুর্দান্ত কারণ এটি স্ব-বর্ণনামূলক। বিশেষত যখন আমি এখন যাচ্ছি ঠিক একই সময়ে যখন আপনার চিবানোর প্রচুর পরিমাণ রয়েছে।
ওলু আদাবনিয়ান

2
আপনার এমনকি কেন প্রয়োজন তা আমি বুঝতে পারি না div। আপনার যদি কেবল একটি <script>ব্লক থাকে তবে ব্রাউজারে কিছুই প্রদর্শিত হবে না।
কোডস জনসন

1
এছাড়াও, যদি আপনার ত্রুটি বার্তাটি কোনও ভেরিয়েবলে সঞ্চিত থাকে, বা যদি এতে উদ্ধৃতি চিহ্ন রয়েছে, আপনি কলটিতে বার্তাটি মোড়ানো ভাল যা করতে হবে json.encodeযাতে উদ্ধৃতি চিহ্নগুলি আপনার কোডের লাইনটি না ভেঙে। উদাহরণস্বরূপ:echo "<script>console.log(".json_encode($msg).")</script>";
শেরিলহোমান

18

জনপ্রিয় উত্তরে লিঙ্কযুক্ত ওয়েবপৃষ্ঠার লেখক হিসাবে , আমি এই সাধারণ সহায়ক ফাংশনটির আমার শেষ সংস্করণটি যুক্ত করতে চাই। এটি অনেক বেশি শক্ত।

আমি json_encode()ভেরিয়েবল টাইপ প্রয়োজনীয় না হয় কিনা তা পরীক্ষা করার জন্য ব্যবহার করি এবং ফ্রেমওয়ার্কগুলির সাথে সমস্যাগুলি সমাধান করার জন্য একটি বাফারও যুক্ত করি add এখানে শক্ত রিটার্ন বা অতিরিক্ত ব্যবহারের দরকার নেই 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 অনুরোধ জন্য উপযুক্ত নাও হতে পারে?
মাওগ বলছে মনিকা

1
হ্যাঁ, এটি খাঁটি স্ট্যাটিক পিএইচপি, অ্যাজাক্স নয়।
bueltge

তবে এটি মনে হয় যে এটি এইচএমএল / জেএস কোডটি একটি পৃষ্ঠার মূল অংশ - এবং আমার আজাক্স কোনও পৃষ্ঠা শৃঙ্খলা ফেরত দেয় না। দুঃখিত, তবে ওটি আমাকে সাহায্য করার চেষ্টা করার জন্য আমি আন্ডারস্ট্যান্ড ও থ্যাঙ্কস দিচ্ছি না
মাওগ বলেছেন মনিকা

1
এজ্যাক্স কলটির অনুরোধ করার আগে আপনাকে সাহায্যকারী ক্রিয়াকলাপটি ট্রিগার করা উচিত, তারপরে আপনি কনসোলে একটি ফলাফলও পাবেন।
বোল্টেজ করুন

সুতরাং আমি সেখানে একটি পরিবর্তনশীল রেখেছি এবং প্রতিটি অক্ষর তার নিজস্ব লাইনে শেষ হয়েছে। কৌতূহলের মতো এটি কেন এটি করছে? 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
খুব পরিশীলিত একটি। ধন্যবাদ @ পঙ্কজ বিশট
ভিকার

2
একটি ব্যাখ্যা ক্রম হবে।
পিটার মর্টেনসেন

14

আরও দুর্দান্ত উত্তর যা আরও গভীরতা যুক্ত করে; তবে জাভাস্ক্রিপ্ট console.log()কমান্ডের মতো আমার আরও সহজ কিছু দরকার ছিল ।

আমি অ্যাজাক্স অ্যাপ্লিকেশনগুলিতে প্রচুর "ডেটা সংগ্রহ এবং এক্সএমএল রূপান্তরিত" করতে পিএইচপি ব্যবহার করি। জাভাস্ক্রিপ্ট console.logসেই ক্ষেত্রে কাজ করে না; এটি এক্সএমএল আউটপুট ভঙ্গ করে।

এক্সডিবাগ ইত্যাদির একই সমস্যা ছিল।

উইন্ডোজে আমার সমাধান:

  • একটি .txtফাইল সেটআপ করুন যা কিছুটা সহজেই পারা যায় এবং লিখতে পারে
  • error_logসেই .iniফাইলটিতে লিখতে ফাইলটিতে পিএইচপি ভেরিয়েবল সেট করুন
  • উইন্ডোজ ফাইল এক্সপ্লোরারে ফাইলটি খুলুন এবং এর জন্য পূর্বরূপ ফলকটি খুলুন
  • error_log('myTest');বার্তা প্রেরণের জন্য পিএইচপি কমান্ড ব্যবহার করুন

এই সমাধানটি সহজ এবং বেশিরভাগ সময় আমার প্রয়োজনগুলি পূরণ করে। স্ট্যান্ডার্ড পিএইচপি, এবং পূর্বরূপ ফলকটি প্রতিবার পিএইচপি এতে লিখলে স্বয়ংক্রিয়ভাবে আপডেট হয়।


বার্তা মোড়ানো কি json_encodeসমস্যা সমাধান করবে? যদি তা হয়, তবে বার্তার মধ্যে উদ্ধৃতি চিহ্নগুলি স্ক্রিপ্টের উদ্ধৃতি চিহ্নগুলিতে হস্তক্ষেপ করতে পারে। (উদাহরণস্বরূপ echo "<script>console.log(".json_encode($msg).")</script>";:)। যদি তা না হয় তবে আমি উত্সাহিত হয়েছি যে সমস্যাটি কী কারণে কনসোল.লগ স্ক্রিপ্টটি ভেঙেছিল এবং কীভাবে / কেন আপনার সমাধান এটি স্থির করেছে। আপনার সমাধানটি ভাল - আমি যে অবস্থার কারণে console.logবা xML আউটপুটটি ভেঙে গেছে সে সম্পর্কে আরও জানার চেষ্টা করছি । বেশিরভাগ ক্ষেত্রে, ত্রুটিযুক্ত লগ আপনি যেমন করেছিলেন তাত্ক্ষণিকের চেয়ে অনেক ভাল console.log
শেরিলহোমান

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

পিএইচপি এবং জাভাস্ক্রিপ্ট মিথস্ক্রিয়া।


একটি ব্যাখ্যা ক্রম হবে। আপনি কি বিস্তারিত বর্ণনা করতে পারেন ( আপনার উত্তর সম্পাদনা করে , মন্তব্যে উত্তর দিয়ে নয়)?
পিটার মর্টেনসেন

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

এবং আপনি কম গুরুত্বপূর্ণ লগগুলি $ ডিবাগ মান ব্যবহার করে সীমাবদ্ধ করে স্যুইচ করতে পারেন।


সুতরাং আপনি যদি কল console('Even Less Important' ,6 , $debug);করেন তবে এটি কনসোলে প্রদর্শিত হবে না? কেন তাই? 5 এর উপরে যে কোনও কিছুই প্রদর্শিত হয় না
HattrickNZ

2
@ হ্যাট্রিকএনজেড এটি আপনাকে বিভিন্ন স্তরের লগ বার্তাগুলির অনুমতি দেওয়ার জন্য। আপনি যদি ডিবাগিং করে থাকেন তবে আপনি প্রচুর তথ্যের সাথে মেসেজের খুব চটুল স্ট্রিম দেখাতে চাইতে পারেন, তবে সাধারণ ক্রিয়াকলাপের সময় আপনি ডিবাগটি সেট করতে পারেন 1 যাতে আপনি কেবল সর্বাধিক গুরুত্বপূর্ণ ত্রুটি / লগ আইটেম প্রদর্শিত হয়। কোডটি লেখার সময় কোন আইটেমটি গুরুত্বপূর্ণ তা সিদ্ধান্ত নেওয়া আপনার পক্ষে।
টবি অ্যালেন

ওপিতে বলা হয়েছে যে তিনি এইচটিএমএল / জেএস কনসোলকে নয়, স্ট্যান্ডার্ড আউটপুটে মুদ্রণ করতে চেয়েছিলেন।
beppe9000

1
হ্যাঁ, তবে বারবার কোড (রিডানডেন্সি) - অবশ্যই রিফ্যাক্টর করা উচিত: $output = '<script>console.log("' . str_repeat(" ", $priority-1)এবং . '");</script>';। শুধুমাত্র implode(",", $data)এবং $dataপৃথক।
পিটার মর্টেনসেন

1
@ পিটার মর্টেনসেন - সত্য ঘটনা! এটি 4yo পোস্টের উপরে সম্পাদিত! :)
জি

7

অ্যারে, স্ট্রিং বা অবজেক্টের জন্যও ছোট এবং সহজ।

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

1
ওপিতে বলা হয়েছে যে তিনি সার্ভার-সাইড টার্মিনাল / স্ট্যান্ডার্ড আউটপুট প্রিন্ট করতে চেয়েছিলেন, এইচটিএমএল / জেএস কনসোলকে নয়।
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
ওপিতে বলা হয়েছে যে তিনি সার্ভার-সাইড টার্মিনাল / স্ট্যান্ডার্ড আউটপুট প্রিন্ট করতে চেয়েছিলেন, এইচটিএমএল / জেএস কনসোলকে নয়।
beppe9000

7

আপনি যদি পিএইচপি লগ ফাইলটিতে লিখতে চান এবং জাভাস্ক্রিপ্ট কনসোলটি না চান তবে আপনি এটি ব্যবহার করতে পারেন:

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

তথ্যসূত্র: ত্রুটি_লগ


তারপরে কেবল ssh এ ঝাঁপুন এবং লগটি
লেগুন

6

ক্রোমের জন্য ক্রোম লগার নামে একটি এক্সটেনশন রয়েছে যাতে পিএইচপি বার্তাগুলি লগ করতে দেয়।

ফায়ারফক্স ডেভটুলগুলি এমনকি ক্রোম লগার প্রোটোকলের জন্য সমন্বিত সমর্থন পেয়েছে

লগিং সক্ষম করতে, আপনাকে কেবল আপনার প্রকল্পে 'ChromePhp.php' ফাইলটি সংরক্ষণ করতে হবে । তারপরে এটি ব্যবহার করা যেতে পারে:

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

গিটহাব পৃষ্ঠা থেকে নেওয়া উদাহরণ ।

আউটপুটটি তখন এর মতো দেখাতে পারে:

ফায়ারফক্স ডেভটুলগুলির মধ্যে সার্ভার লগ


আপনি এটি সুরকারের মাধ্যমেও ইনস্টল করতে পারেন:"ccampbell/chromephp": "*"
padawanTony

5

পিএইচপি লাইব্রেরির সাথে একটি দুর্দান্ত গুগল ক্রোম এক্সটেনশন, পিএইচপি কনসোল রয়েছে যা আপনাকে এগুলি করতে দেয়:

  • Chrome জাভাস্ক্রিপ্ট কনসোল এবং বিজ্ঞপ্তি পপআপগুলিতে ত্রুটি এবং ব্যতিক্রমগুলি দেখুন।
  • যেকোন ধরণের ভেরিয়েবল ডাম্প করুন।
  • পিএইচপি কোড দূরবর্তীভাবে কার্যকর করুন।
  • পাসওয়ার্ড দ্বারা অ্যাক্সেস রক্ষা করুন।
  • অনুরোধের মাধ্যমে গ্রুপ কনসোল লগগুলি।
  • error file:lineআপনার পাঠ্য সম্পাদক এ ঝাঁপ দাও ।
  • ক্লিপবোর্ডে ত্রুটি / ডিবাগ ডেটা অনুলিপি করুন (পরীক্ষকদের জন্য)।

1
পিএইচপি ত্রুটি, ব্যতিক্রম এবং ব্যবহারকারী-সংজ্ঞায়িত ডিবাগিং আউটপুট জেএস কনসোলে লেখার জন্য আমার পছন্দের পদ্ধতি। আমি বছরের পর বছর ধরে এটি ব্যবহার করে চলেছি - অত্যন্ত নির্ভরযোগ্য এবং পিএইচপি সংশোধনগুলির সাথে আপ টু ডেট। আমি অন্য কিছু ব্যবহার করবেন না।
ভেলোজেট

3

আমি একটি ওয়ার্ডপ্রেস প্লাগইনে কোডটি ডিবাগ করার একটি উপায় খুঁজছিলাম যা আমি বিকাশ করছিলাম এবং এই পোস্টটি জুড়ে এসে।

আমি অন্যান্য প্রতিক্রিয়াগুলি থেকে আমার পক্ষে সবচেয়ে প্রযোজ্য কোডের বিট নিয়েছি এবং এগুলি একটি ফাংশনে সংযুক্ত করেছিলাম যা আমি ওয়ার্ডপ্রেস ডিবাগিংয়ের জন্য ব্যবহার করতে পারি। ফাংশনটি হ'ল:

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

যদি এই ফাংশনটি ওয়ার্ডপ্রেস বিকাশের সাথে ব্যবহার করা হয়, তবে ফাংশনটি functions.phpশিশু থিমের ফাইলে রাখা উচিত এবং তারপরে কোডের যে কোনও জায়গায় ডেকে আনা যেতে পারে।


2

আমি উপরের সমস্তটি ডিবাগার এবং লগারের পক্ষে ত্যাগ করেছি । আমি যথেষ্ট প্রশংসা করতে পারি না!

উপরের ডানদিকে কেবল একটি ট্যাবে ক্লিক করুন বা প্রসারিত / আড়াল করতে "এখানে ক্লিক করুন" এ ক্লিক করুন।

বিভিন্ন "বিভাগ" লক্ষ্য করুন। এটিকে প্রসারিত / সঙ্কুচিত করতে আপনি যে কোনও অ্যারে ক্লিক করতে পারেন।

ওয়েব পৃষ্ঠা থেকে

প্রধান বৈশিষ্ট্য:

  • গ্লোবাল ভেরিয়েবলগুলি দেখান ($ গ্লোবালস, $ _POST, $ _GET, $ _COOKIE, ইত্যাদি)
  • পিএইচপি সংস্করণ এবং লোড হওয়া এক্সটেনশানগুলি দেখান
  • ত্রুটি হ্যান্ডলারের মধ্যে নির্মিত পিএইচপি প্রতিস্থাপন করুন
  • এসকিউএল অনুসন্ধানগুলি লগ করুন
  • কোড এবং এসকিউএল কোয়েরি কার্যকর করার সময় পর্যবেক্ষণ করুন
  • পরিবর্তনগুলির জন্য ভেরিয়েবলগুলি পরীক্ষা করুন
  • ফাংশন কল ট্রেসিং
  • কোড কভারেজ বিশ্লেষণ স্ক্রিপ্টের কোন রেখাগুলি কার্যকর করা হয়েছে তা পরীক্ষা করতে
  • সব ধরণের ভেরিয়েবলের ডাম্প
  • উত্স কোড দেখতে কোড হাইলাইটার সহ ফাইল পরিদর্শক
  • অ্যাজাক্স স্ক্রিপ্টগুলির জন্য জাভাস্ক্রিপ্ট কনসোলটিতে (কেবল ক্রোম) বার্তা প্রেরণ করুন

এখানে চিত্র বিবরণ লিখুন


ওহে. নতুন কোন কাঁটাচামচ বা অনুরূপ সরঞ্জামটি কি আরও আধুনিক এবং বর্তমানে রক্ষণাবেক্ষণ করা হচ্ছে?
মেটাফানিয়েল

আমি এটি কোড করি নি, তাই নতুন কাঁটাচামড়ার জন্য, আমি অনুমান করি যে কেবল গিটহাবে যাব? বিকল্পগুলির জন্য, softwarerecs.stackexchange.com এ জিজ্ঞাসা করুন এবং আমরা আপনাকে সহায়তা করব।
মাওগ বলছেন মনিকা

1
@ মাওগহি, ধন্যবাদ আমি জিজ্ঞাসা করেছি কারণ phptoolcase Github এবং সেখানে তালিকাভুক্ত কাঁটাগুলি 5 বছরে আপডেট হয়নি। অন্যান্য স্ট্যাকএক্সচেঞ্জ সাইটের জন্য ধন্যবাদ। আমি সবেমাত্র ক্লকওয়ার্ক পেয়েছি । আমি ভাবছি এটি এর মতো বা আরও ভাল
কিনা

এবং ক্লকওয়ার্কের জন্য আপনাকে ধন্যবাদ । এটি দুর্দান্ত দেখায় (কেবলমাত্র একটি করুণ যে আমি frame ফ্রেমওয়ার্কগুলির কোনওটিই ব্যবহার করি না (আমি অবাক হয়েছি এটি কীভাবে এটি ডাটাবেস অনুসন্ধানগুলি ডাম্প করতে পারে - ফ্রেমওয়ার্কটি হুক করে)))। ভাল তদন্ত মূল্য। (+1)
মাওগ বলছেন মনিকা

2

2017 হিসাবে, ফায়ারব্যাগ এবং সেজন্য ফায়ারএইচপি অক্ষম করা হয়েছে

আমি কনসোলের মাধ্যমে ডিবাগিংয়ের জন্য ফায়ার পিএইচপি থেকে ফায়ারব্যাগে নির্বিঘ্নে স্থানান্তরিত করার জন্য ChromePHP সরঞ্জামটিতে কিছুটা সামান্য পরিবর্তন লিখেছি।

এই নিবন্ধটি পরিষ্কার সহজ পদক্ষেপে ব্যাখ্যা করে

5 মিনিটের মধ্যে ফায়ারএইচপি থেকে ক্রোম পিএইচপিতে স্থানান্তর করুন (বিদ্যমান কোডটি ভঙ্গ না করে)


2

অ্যাজাক্স কল বা এক্সএমএল / জেএসএন প্রতিক্রিয়াগুলির জন্য, যেখানে আপনি শরীরের সাথে গোলযোগ করতে চান না, আপনাকে এইচটিটিপি শিরোনামের মাধ্যমে লগগুলি প্রেরণ করতে হবে, তারপরে সেগুলি ওয়েব এক্সটেনশান সহ কনসোলে যুক্ত করতে হবে। ফায়ারএইচপিপি (আর উপলভ্য নয়) এবং কোয়ান্টামপিএইচপি (ক্রোমপিএইচপির একটি কাঁটাচামচ) ফায়ারফক্সে এটি করে।

আপনার যদি ধৈর্য থাকে, এক্স-ডিবাগ একটি ভাল বিকল্প - আপনি পিএইচপি সম্পর্কে গভীর অন্তর্দৃষ্টি পাবেন, আপনার স্ক্রিপ্টটি থামানোর ক্ষমতা সহ, কী চলছে তা দেখুন, তারপরে স্ক্রিপ্টটি আবার শুরু করুন।



2

আমি কোনও পার্টির জন্য দেরি করতে পারি, তবে আমি লগিং ফাংশনটি বাস্তবায়নের সন্ধান করছিলাম যা:

  • শুধু জাভাস্ক্রিপ্ট মত, কমা দ্বারা পৃথক আর্গুমেন্ট একটি পরিবর্তনশীল নেয় console.log(),
  • একটি বিন্যাসিত আউটপুট দেয় (কেবল সিরিয়ালযুক্ত স্ট্রিং নয়),
  • একটি সাধারণ জাভাস্ক্রিপ্ট থেকে পৃথক console.log()

সুতরাং আউটপুট যেমন মনে হচ্ছে:

এখানে চিত্র বর্ণনা লিখুন

(নীচের স্নিপেটটি পিএইচপি-তে পরীক্ষা করা হয়েছে 7.2.11I'm আমি এর পিএইচপি পশ্চাদপদ সামঞ্জস্যতা সম্পর্কে নিশ্চিত নই It এটি জাভাস্ক্রিপ্টের জন্যও সমস্যা হতে পারে (পুরানো ব্রাউজারগুলির শর্তে)) কারণ এটি 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);

?>

এই স্নিপেট আমাকে বাঁচিয়েছে। :) প্রকৃত সার্ভারগুলিতে অ্যাক্সেস না করে আমার প্রোডাকশন কোডে কিছু পরিবর্তন করা দরকার ছিল এবং এটি কাছাকাছি আসার জন্য এটি উপযুক্ত। ধন্যবাদ!
রাফেল আলেক্সো

আমি আনন্দিত যে আমি সাহায্য করতে পেরেছি।
হাইনেকস

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
আপনার আপনার ধারণা এবং সমাধান সম্পর্কে একটি ইঙ্গিত যুক্ত করা উচিত। এছাড়াও উত্স অব্যবহৃত উত্স আছে।
বুলেটজ

0

এখানে একটি কার্যকর ফাংশন। এটি ব্যবহার করা অত্যন্ত সহজ, আপনি যেকোন প্রকারের পছন্দমতো আর্গুমেন্ট পাস করতে পারবেন এবং ব্রাউজার কনসোল উইন্ডোতে অবজেক্টের বিষয়বস্তু প্রদর্শিত হবে যেমন আপনি জাভাস্ক্রিপ্ট থেকে কনসোল.লগ বলেছেন - তবে পিএইচপি থেকে

দ্রষ্টব্য, আপনি '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 () গতিশীল সংখ্যক ইনপুট আর্গুমেন্ট পড়ার জন্য পিএইচপি ফাংশন এবং এই ফাংশনটিকে এক ফাংশন কল থেকে অসীম বহু কনসোল.লগ অনুরোধ করার অনুমতি দেয় have


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

পরীক্ষা ও ব্যবহার:

ব্যবহার সহজ। ম্যানুয়ালি কনসোল পোস্ট করার জন্য প্রথম ফাংশন অন্তর্ভুক্ত করুন। পিএইচপি ব্যতিক্রম হ্যান্ডলিং ডাইভার্ট করার জন্য দ্বিতীয় ফাংশন ব্যবহার করুন। নিম্নলিখিত পরীক্ষার একটি ধারণা দেওয়া উচিত।

    // 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)প্রথম আর্গুমেন্ট হিসাবে স্ট্রিং বা অ্যারে নেয় এবং জেএস সন্নিবেশ ব্যবহার করে এটি কনসোলে পোস্ট করে।

  • দ্বিতীয় যুক্তি হ'ল ত্রুটিগুলির বিরুদ্ধে সাধারণ লগগুলিকে আলাদা করার জন্য একটি পতাকা। ত্রুটির জন্য, আমরা ইভেন্ট শ্রোতাদেরকে কোনও ত্রুটি নিক্ষেপ করা হলে সতর্কতাগুলির মাধ্যমে আমাদের জানানোর জন্য যুক্ত করছি, কনসোলে হাইলাইটও করছি। এই পতাকাটি মিথ্যা হিসাবে ডিফল্ট হয়েছে।

  • তৃতীয় এবং চতুর্থ আর্গুমেন্টগুলি ফাইল এবং লাইন নম্বরগুলির স্পষ্ট ঘোষণা, যা alচ্ছিক। অনুপস্থিত থাকলে, এগুলি আমাদের debug_backtrace()জন্য আনতে পূর্বনির্ধারিত পিএইচপি ফাংশনটি ব্যবহার করে তাদের ডিফল্ট করা হয়েছে ।

  • exceptions_to_console($svr, $str, $file, $ln)পিএইচপি ডিফল্ট ব্যতিক্রম হ্যান্ডলার দ্বারা ডেকে নেওয়া ক্রমে পরবর্তী ফাংশনটিতে চারটি যুক্তি রয়েছে। এখানে প্রথম যুক্তিটি হল তীব্রতা, যা আমরা severity_tag($code)ত্রুটি সম্পর্কিত আরও তথ্য সরবরাহ করতে ফাংশন ব্যবহার করে পূর্বনির্ধারিত ধ্রুবকগুলির সাথে ক্রসচেক করি ।

বিজ্ঞপ্তি:

  • উপরের কোডে জেএস ফাংশন এবং পদ্ধতিগুলি ব্যবহার করা হয় যা পুরানো ব্রাউজারগুলিতে পাওয়া যায় না। পুরানো সংস্করণগুলির সাথে সামঞ্জস্য করার জন্য, এটি প্রতিস্থাপন প্রয়োজন।

  • উপরের কোডটি পরিবেশ পরীক্ষা করার জন্য, যেখানে আপনি একাই সাইটে প্রবেশ করতে পারেন। লাইভ (উত্পাদন) ওয়েবসাইটে এটি ব্যবহার করবেন না।

পরামর্শ:

  • প্রথম console()ফাংশনটিতে কিছু বিজ্ঞপ্তি ছুঁড়েছে, তাই আমি এগুলিকে অন্য ফাংশনের মধ্যে আবদ্ধ করে রেখেছি এবং এটিকে ত্রুটি নিয়ন্ত্রণ অপারেটর '@' ব্যবহার করে বলেছি। আপনি যদি বিজ্ঞপ্তিগুলি কিছু মনে না করেন তবে এটি এড়ানো যেতে পারে।

  • সর্বশেষে তবে অন্তত নয়, কোডিং করার সময় পপিং করা সতর্কতাগুলি বিরক্তিকর হতে পারে। এর জন্য আমি পপআপ সতর্কতাগুলির পরিবর্তে এই বীপটি (সমাধানটিতে পেয়েছি: https://stackoverflow.com/a/23395136/6060602 ) ব্যবহার করছি। এটি বেশ দুর্দান্ত এবং সম্ভাবনাগুলি অফুরন্ত, আপনি আপনার পছন্দসই টিউনগুলি খেলতে পারবেন এবং কোডিংকে কম চাপ দিন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.