কিভাবে একটি ডিবাগ লগ প্রিন্ট করবেন?


129

আমি কিছু পিএইচপি কোড ডিবাগ করতে চাই, তবে আমার ধারনা স্ক্রিনে বা ফাইলটিতে একটি লগ মুদ্রণ করা আমার পক্ষে ভাল fine

পিএইচপি কোডে আমার লগটি কীভাবে প্রিন্ট করা উচিত?

স্বাভাবিক print/ printfমনে হয় কনসোলটি নয় এইচটিএমএল আউটপুটে যাবে।

আমার কাছে অ্যাপাচি সার্ভার পিএইচপি কোডটি কার্যকর করছে।


আপনার স্ক্রিপ্টটি কি কোনও ওয়েব ব্রাউজারে বা কনসোলে চলছে (অ্যাপাচি / আইআইএসের পরিবর্তে পিএইচপি.এক্সই ব্যবহার করে ওরফে পার্সড)?
danielrsmith

আপনার এই প্রশ্নটি দেখতে হবে, কিছুটা কার্যকর লগিং কোড রয়েছে: স্ট্যাকওভারফ্লো.com
বেন

আপনি কোন ভাষা থেকে আসছেন? ঠিক তেমনই আপনি পিএইচপি খুব আলাদা তবে অন্যান্য সংকলিত ভাষাগুলি
Ibu

1
@lbu: প্রকৃতপক্ষে .. আমি আশা করিনি, printfপ্রশ্ন অনেক upvotes পাবে ...
ইউজিন

error_log ($ স্ট্রিং);
থেওবাস

উত্তর:


186

একটি স্বল্প পরিচিত ট্রিকটি হ'ল মোড_এফপি মানচিত্রে অ্যাপাচি লগের স্ট্যাডার। এবং, এর জন্য একটি স্ট্রিম রয়েছে, তাই অ্যাপাচি ত্রুটি লগের file_put_contents('php://stderr', print_r($foo, TRUE))মানটি সুন্দরভাবে ফেলে দেবে $foo


1
+ উল্লেখ করার জন্য চালিত, বিটিডব্লিউ আপনি কনসোল অ্যাপ্লিকেশনটি ডিবাগ করার সময় ত্রুটি_লগের মানটি 'পিএইচপি: // স্টডআউট ' এ সেট করতে পারেন এবং ত্রুটি বার্তাগুলি সরাসরি কনসোলটিতে উপস্থিত করতে পারেন, যেমন: ত্রুটি_লগ ("আপনি বিভ্রান্ত হয়েছেন!", 3 , "পিএইচপি: // স্টডআউট");
স্টেফগোসেলিন

4
+1 এই উত্তরটি খুঁজে পেতে আমার খুব বেশি সময় লেগেছে। আমি সত্যই এটি খুঁজছিলাম। আমার অ্যারে কী রয়েছে তা কীভাবে দেখতে হবে তা বুঝতে পারি না (দ্রুপালে কাজ করা)।
স্টিভস 14

আপনার প্রয়োজনীয় ধরণের তথ্য যদি আপনাকে না পান তবে তার var_export($foo, true)পরিবর্তে আমি ব্যবহার করার পরামর্শ দেব । print_r($foo, true)print_r
বেন

এটি কি ত্রুটি_লগ (মুদ্রণ_আর (oo ফু)) এর মতো হবে না; ?
ব্রুনিস

143
error_log(print_r($variable, TRUE)); 

দরকারী হতে পারে


2
দুর্ভাগ্যক্রমে, এটি সবচেয়ে সুবিধাজনক সমাধান। এক্সডিবাগ এটি সর্বদা চালাতে ভারী হয়। আপনার পক্ষে ভোট দিয়েছেন
ফুং ডি আন

26

আপনি আপনার সার্ভারগুলিতে ত্রুটি লগ ফাইল (বা আপনি চাইলে একটি alচ্ছিক অন্য ফাইল) প্রেরণে ত্রুটি_লগ ব্যবহার করতে পারেন


21

আপনি যদি লিনাক্সে থাকেন:

file_put_contents('your_log_file', 'your_content');

অথবা

error_log ('your_content', 3, 'your_log_file');

এবং তারপরে কনসোলে

tail -f your_log_file

এটি অবিচ্ছিন্নভাবে শেষ পংক্তিটি ফাইলটিতে প্রদর্শিত হবে।


9

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

পিএইচপি-তে, আপনার কাছে ডিবাগিং সমাধানের 3 বিভাগ রয়েছে:

  1. একটি ওয়েবপৃষ্ঠায় আউটপুট (জিনিসগুলির আরও সুন্দর দর্শন জন্য dBug গ্রন্থাগার দেখুন)।
  2. একটি লগ ফাইল লিখুন
  3. XDebug দিয়ে সেশন ডিবাগিংয়ে

আপনার ব্যবহৃত অন্যান্য ভাষার মতো পিএইচপি ব্যবহার করার চেষ্টা করার পরিবর্তে সেগুলি ব্যবহার করতে শিখুন।


31
যিনি কনসোল অ্যাপস এবং বিভিন্ন নন ওয়েব স্ক্রিপ্টগুলি লেখার জন্য অনেক সময় ব্যয় করেন , আমি বিনীতভাবে সেটার সাথে একমত হব না।
স্টেফগোসেলিন

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

1
@ স্টেফগোসেলিন: নেটবিয়ানরা অনেকটা একই কাজ করেছে, যদিও এক্সডেবগের সাথে আমি সবচেয়ে ভাল দেখেছি অপ্টানার সাথে।
সিলভারড্রাগ

1
আমি নেটবিনে এক্সডেবাগ ব্যবহার করি এবং এটি বেশিরভাগ সময় সূক্ষ্মভাবে কাজ করে। তবে, এমন অনেক সময় আছে যখন আপনার কোনও ফাইলের স্টাফ লগ করতে হবে।
কোসান

এগুলিও চেষ্টা করে দেখুন..আপনি আরও কিছু করতে সক্ষম হবেন! stackoverflow.com/a/44050914/2053479
গণেশ

5

আপনি কনসোলে ডিবাগ করছেন? ডিবাগিং পিএইচপি করার জন্য বিভিন্ন বিকল্প রয়েছে। সবচেয়ে সাধারণ দ্রুত ও মলিন ডিবাগিং জন্য ব্যবহৃত ফাংশন , var_dump

এটি বলা এবং বাহিরে, যদিও var_dump দুর্দান্ত এবং অনেক লোক কেবল এটি দিয়ে সবকিছু করে, এমন অন্যান্য সরঞ্জাম এবং কৌশল রয়েছে যা এটি কিছুটা মশালাই করতে পারে।

ওয়েবপৃষ্ঠায় ডিবাগ করা হলে আপনাকে সহায়তা করার বিষয়গুলি, <pre> </pre>অ্যারে এবং অবজেক্টগুলিতে আপনাকে যথাযথ ফর্ম্যাটিং দিতে আপনার ডাম্প স্টেটমেন্টের চারপাশে ট্যাগগুলি মোড়ানো ।

অর্থাৎ,

<div> some html code ....
      <a href="<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

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

error_reporting(E_ALL);
ini_set('display_errors', '1');

শুভকামনা!



2

সহজ উপায় হ'ল ট্রিগার_অরর:

 trigger_error("My error");

তবে আপনি আরে বা অবজেক্টগুলি ব্যবহার করতে পারেন না

var_dump

ট্রিগার_রর সম্ভবত আপনার ত্রুটির লগগুলিতে লেখার সর্বোত্তম উপায়। আপনি নিজের কৃতজ্ঞতা জানাতে চাইবেন যখন পরে কিছু কাস্টম ডেটা দিয়ে লগ লাইনগুলি পরিবর্তন করতে চান।
আনশুল

2

আপনি এটির মতো কোনও ফাইলেও লিখতে পারেন:

$logFilePath = '../logs/debug.text';
ob_start();

// if you want to concatenate:
if (file_exists($logFilePath)) {
    include($logFilePath);
}
// for timestamp
$currentTime = date(DATE_RSS);

// echo log statement(s) here
echo "\n\n$currentTime - [log statement here]";

$logFile = fopen($logFilePath, 'w');
fwrite($logFile, ob_get_contents());
fclose($logFile);
ob_end_flush();

নিশ্চিত করুন যে যথাযথ অনুমতি সেট করা আছে যাতে পিএইচপি ফাইল ( 775) এ অ্যাক্সেস করতে এবং লিখতে পারে ।


1

আপনি http://liveoutput.com/ এ কল করার জন্য পিএইচপি কার্ল মডিউলটি ব্যবহার করতে পারেন । এটি একটি সুরক্ষিত, কর্পোরেট পরিবেশে দুর্দান্ত কাজ করে যেখানে php.ini এ কিছু নির্দিষ্ট বিধিনিষেধ উপস্থিত রয়েছে যা ব্যবহারকে সীমাবদ্ধ করে file_put_contents


1

পিএইচপি ডিবাগিং এবং লগিংয়ের জন্য এটি একটি দুর্দান্ত সরঞ্জাম: পিএইচপি ডিবাগার এবং লগার

এটি ঠিক 3 লাইনের কোড সহ বাক্সের বাইরে কাজ করে। এটি আজাক্স ডিবাগিংয়ের জন্য জেএস কনসোলে বার্তা প্রেরণ করতে পারে এবং ত্রুটি হ্যান্ডলারটি প্রতিস্থাপন করতে পারে। এটি var_dump () এবং মুদ্রণ_আর () এর মতো ভেরিয়েবল সম্পর্কে তথ্য ছড়িয়ে দেয়, তবে আরও পাঠযোগ্য বিন্যাসে। খুব সুন্দর সরঞ্জাম!


1

আমি এর মধ্যে অনেকগুলি ব্যবহার করেছি, তবে যেহেতু সাধারণত বিকাশকালে আমার ডিবাগ করা প্রয়োজন, এবং যেহেতু আমি লোকালহোস্টে বিকাশ করি, তাই আমি অন্যের পরামর্শ অনুসরণ করেছি এবং এখন ব্রাউজারের জাভাস্ক্রিপ্ট ডিবাগ কনসোলটিতে লিখি (দেখুন http: //www.codefirest। নেট / ডিবাগিং-পিএইচপি-ইন-ব্রাউজার-জাভাস্ক্রিপ্ট-কনসোল )।

তার মানে আমি যে ওয়েব পৃষ্ঠায় আমার পিএইচপি আমার ব্রাউজারে উত্পন্ন করছে তা দেখতে এবং কোনও ডিবাগের ট্রেসটি দ্রুত প্রদর্শন / আড়াল করতে F12 টিপুন।

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

যদি কেউ আমাদের কোডটি সিদ্ধান্ত নেয় তবে আমি একটি ছোটখাট পরিবর্তন করেছি। পরে

function debug($name, $var = null, $type = LOG) {

আমি যোগ করলাম

$name = 'PHP: ' . $name;

আমার সার্ভার সাইড পিএইচপি এইচটিএমএলকে জাভাস্ক্রিপ্টের সাথে সংযুক্ত করে উত্পন্ন করে এবং পিএইচপি এবং জেএস থেকে আউটপুটটির মধ্যে পার্থক্য করতে আমি এটি দরকারী বলে মনে করি।

(দ্রষ্টব্য: আমি বিভিন্ন আপডেট আউটপুট প্রকারগুলি চালু এবং বন্ধ করার অনুমতি দিতে আমি বর্তমানে এটি আপডেট করছি: পিএইচপি থেকে, জেএস থেকে এবং ডাটাবেস অ্যাক্সেস)


1

আমি কেকএফপি ব্যবহার করি তাই আমি ব্যবহার করি:

$this->log(YOUR_STRING_GOES_HERE, 'debug');

0

তুমি ব্যবহার করতে পার:

<?php
echo '<script>console.log("debug log")</script>';
?>

2
এটির অনেক বেশি ওভারহেড রয়েছে। কেন একটি সাধারণ ত্রুটি আউটপুট জন্য জাভাস্ক্রিপ্ট আবেদন?
ক্লকডব্লিউআরআর্ক

-8

তুমি ব্যবহার করতে পার

<?php
{
    AddLog("anypage.php","reason",ERR_ERROR);
}
?>

অথবা আপনি যদি কোনও বিবৃতিতে সেই বিবৃতিটি মুদ্রণ করতে চান তবে আপনি ব্যবহার করতে পারেন

AddLog("anypage.php","string: ".$string,ERR_DEBUG_LOW);

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