আমি কীভাবে var_dump এর ফলাফলটিকে স্ট্রিংয়ে ক্যাপচার করতে পারি?


605

আমি var_dumpএকটি স্ট্রিং আউটপুট ক্যাপচার করতে চাই ।

পিএইচপি ডকুমেন্টেশন বলে;

ব্রাউজারে তার ফলাফলটি আউটপুট করে এমন কোনও কিছুর সাথে, আউটপুট-নিয়ন্ত্রণ ফাংশনগুলি এই ফাংশনটির আউটপুট ক্যাপচার করতে এবং স্ট্রিংয়ে সংরক্ষণ করতে পারে (উদাহরণস্বরূপ)।

কীভাবে এটি কাজ করতে পারে তার উদাহরণ কী হবে?

print_r() এটি একটি বৈধ সম্ভাবনা নয়, কারণ এটি আমাকে আমার প্রয়োজনীয় তথ্য দেবে না।

উত্তর:


601

আউটপুট বাফারিং ব্যবহার করুন:

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>

8
আউটপুট বাফারিং ব্যবহারটি সম্ভবত এখানে সম্পাদনের উপর নেতিবাচক প্রভাব ফেলবে। কোনও জটিল স্ক্রিপ্ট কার্যকর করার সময় যদি আপনার একাধিক ভেরিয়েবলগুলি দেখার প্রয়োজন হয় তবে এটি সত্যিই অগোছালোও হতে পারে।
স্বাওয়ারেসৌপ

83
@ ইনডাবডার আমি কেবল কখনও ডিবাগিংয়ের জন্য সুবিধাজনক বৈশিষ্ট্য হিসাবে var_dump ব্যবহার করেছি, এবং উত্পাদন কোডে অবশ্যই var_dump বিবৃতি কখনও ছাড়েনি। আমি ধারণা করি এটি সাধারণ। এই পরিস্থিতিতে, কার্য সম্পাদন মোটেই প্রাসঙ্গিক হওয়ার সম্ভাবনা কম।
মার্ক আমেরিকা 28'13

এছাড়াও পঠনযোগ্যতার জন্য ট্যাগগুলি সরান (যদি আপনি কেবল স্ট্রিং চান) ব্যবহার করে strip_tags(), এটি কেবল প্রকার এবং মানটি ফিরিয়ে দেবে।
অনিল

11
এটি প্রশ্নের উত্তম আক্ষরিক উত্তর, কারণ আপনি যেমন জিজ্ঞাসা করেছিলেন ঠিক ঠিক তেমনই 'স্ট্রিং-এ একটি_রূপের ফলাফল' ক্যাপচার [ইঙ্গিত] করছেন '। var_export () হ'ল স্পিরিটের আরও ভাল উত্তর, কারণ এটি সাধারণত আরও জ্ঞান অর্জন করে।
জোশি কেরিবউ

1
@ অ্যালবার্ট হেন্ডরিক্স আমি var_dump পছন্দ করি। এক্সডিবাগ সক্ষম করার সাথে আপনি একটি সুন্দর ডেটা প্রদর্শন করতে পারবেন।
রোবসচ

880

চেষ্টা var_export

আপনি চেক আউট করতে চাইতে পারেন var_export- যদিও এটি একই আউটপুট সরবরাহ করে না যেমন var_dumpএটি দ্বিতীয় $returnপ্যারামিটার সরবরাহ করে যা এটি প্রিন্টের পরিবর্তে তার আউটপুট ফিরিয়ে আনবে:

$debug = var_export($my_var, true);

কেন?

আমি এই ওয়ান-লাইনার ব্যবহার ob_startএবং পছন্দ করতে পছন্দ করি ob_get_clean()। আমি আরও দেখতে পেলাম যে আউটপুটটি পড়া খুব সহজ, কারণ এটি কেবল পিএইচপি কোড।

var_dumpএবং এর মধ্যে পার্থক্যটি var_exportহ'ল "ভেরিয়েবলের পার্সেবল স্ট্রিং প্রতিনিধিত্ব"var_export ফিরিয়ে দেয় যখন ভেরিয়েবল সম্পর্কিতvar_dump তথ্য সরিয়ে দেয়। বাস্তবে এর অর্থ হ'ল এটি var_exportআপনাকে বৈধ পিএইচপি কোড দেয় (তবে আপনাকে ভেরিয়েবল সম্পর্কে যথেষ্ট তথ্য দিতে না পারে, বিশেষত যদি আপনি সংস্থান নিয়ে কাজ করছেন )।

ডেমো:

$demo = array(
    "bool" => false,
    "int" => 1,
    "float" => 3.14,
    "string" => "hello world",
    "array" => array(),
    "object" => new stdClass(),
    "resource" => tmpfile(),
    "null" => null,
);

// var_export -- nice, one-liner
$debug_export = var_export($demo, true);

// var_dump
ob_start();
var_dump($demo);
$debug_dump = ob_get_clean();

// print_r -- included for completeness, though not recommended
$debug_printr = print_r($demo, true);

আউটপুট মধ্যে পার্থক্য:

var_export ( $debug_exportউপরের উদাহরণে):

 array (
  'bool' => false,
  'int' => 1,
  'float' => 3.1400000000000001,
  'string' => 'hello world',
  'array' => 
  array (
  ),
  'object' => 
  stdClass::__set_state(array(
  )),
  'resource' => NULL, // Note that this resource pointer is now NULL
  'null' => NULL,
)

var_dump ( $debug_dumpউপরের উদাহরণে):

 array(8) {
  ["bool"]=>
  bool(false)
  ["int"]=>
  int(1)
  ["float"]=>
  float(3.14)
  ["string"]=>
  string(11) "hello world"
  ["array"]=>
  array(0) {
  }
  ["object"]=>
  object(stdClass)#1 (0) {
  }
  ["resource"]=>
  resource(4) of type (stream)
  ["null"]=>
  NULL
}

মুদ্রণ_আর ( $debug_printrউপরের উদাহরণে):

Array
(
    [bool] => 
    [int] => 1
    [float] => 3.14
    [string] => hello world
    [array] => Array
        (
        )

    [object] => stdClass Object
        (
        )

    [resource] => Resource id #4
    [null] => 
)

ক্যাভেট: var_exportবিজ্ঞপ্তি উল্লেখগুলি পরিচালনা করে না

আপনি যদি বিজ্ঞপ্তি সংক্রান্ত রেফারেন্স সহ কোনও ভেরিয়েবল ডাম্প করার চেষ্টা করছেন, কল করার var_exportফলে পিএইচপি সতর্কতা হবে:

 $circular = array();
 $circular['self'] =& $circular;
 var_export($circular);

ফলাফল স্বরূপ:

 Warning: var_export does not handle circular references in example.php on line 3
 array (
   'self' => 
   array (
     'self' => NULL,
   ),
 )

উভয় var_dumpএবং print_rঅন্যদিকে, *RECURSION*বৃত্তাকার রেফারেন্সগুলির মুখোমুখি হওয়ার সময় স্ট্রিং আউটপুট হবে ।


11
এটি অবশ্যই গৃহীত উত্তরগুলির চেয়ে উত্তম উত্তর। আমি অবাক হলাম এর আরও বেশি কিছু নেই! আপনি কীভাবে অনুসন্ধান করছেন সে সমস্ত তথ্য কেন এটি দিতে পারেন না তা আপনি কী ব্যাখ্যা করতে পারেন?
জেএমটাইলার

7
@JMTyler var_export আয় একটি parsable স্ট্রিং-মূলত পিএইচপি কোড করার সময়, var_dump ডেটার একটি কাঁচা ডাম্প প্রদান করে। সুতরাং, উদাহরণস্বরূপ, আপনি যদি 1 এর মান সহ একটি পূর্ণসংখ্যার উপর var_dump কল করেন তবে এটি int(1)var_export প্রিন্ট করার সময় মুদ্রণ করবে 1
inxilpro

4
var_export তার পেটে অবতরণ করে যদি আপনি var_dump কাজ করার সময় এটি $ GLOBALS দিয়ে ব্যবহার করেন।
ওলাফ

3
নিজস্ব উল্লেখগুলি সহ ভেরিয়েবলগুলির সাথে কাজ করবে না .. var_export var_dump এর মতো কাজ করে না; এটির মতো, $ v = []; $ v [] = & $ v; var_export ($ v, সত্য); ...
হাসানরিক

3
লোকেদের হাইপিং করা বন্ধ করুনvar_exportনা আসলে ভাল ডিবাগ কারণ আপনার জন্য একটি ব্রাউজার অনুসন্ধান না করতে পারে জন্য (int)অথবা (স্ট্রিং) `এবং ইত্যাদি এটি একটি ছোট মহাকাশ তথ্য বহন mangle করা, শুধু চেষ্টা করে দেখুন: var_export(''); var_export('\'');। এবং সর্বাপেক্ষা গুরুত্বপূর্ণ, পিএইচপি মারাত্মক ত্রুটির জন্য প্রস্তুত হোন : নেস্টিং স্তরটি খুব গভীর - পুনরাবৃত্তি নির্ভরতা? সি: \ পথ \
file.php

76

আপনি এটি করতে পারেন:

$dump = print_r($variable, true);

17
যদিও আমি বিশেষভাবে var_dump উল্লেখ করেছি :)
মার্ক বাইক

7
আমি ব্যক্তিগতভাবে আমি print_rযেখানে পারি সেখানে ব্যবহার করতে পছন্দ করি তবে দুর্ভাগ্যক্রমে কখনও কখনও এটি পর্যাপ্ত তথ্য সরবরাহ করে না। উদাহরণ হিসেবে বলা যায়, যেহেতু এটি স্ট্রিং যেখানে এটি করতে পারেন, উভয় কাস্ট falseএবং nullএকটি খালি স্ট্রিং হিসেবে শো। যে ক্ষেত্রে আমি এইগুলির মধ্যে পার্থক্যের বিষয়ে যত্নশীল, আমি ভিক্ষাবৃত্তিতে var_dumpবা অবলম্বন করব var_export
জেএমটাইলার

15

আপনি এই serialize()ফাংশনটি ব্যবহার করার চেষ্টাও করতে পারেন । কখনও কখনও এটি ডিবাগিংয়ের উদ্দেশ্যে খুব দরকারী।


7
একটি সতর্কতার শব্দ - যদি আপনি স্ট্রিং হিসাবে আউটপুট চান তার কারণ আপনার error_logএই সমাধানটি ব্যবহার করা উচিত নয়, কারণ সিরিয়ালাইজের আউটপুটে নাল বাইট থাকতে পারে এবং নাল error_log বাইটসযুক্ত স্ট্রিংগুলি কাটাতে পারে ।
মার্ক অ্যামেরি

15
function return_var_dump(){
    // It works like var_dump, but it returns a string instead of printing it.
    $args = func_get_args(); // For <5.3.0 support ...
    ob_start();
    call_user_func_array('var_dump', $args);
    return ob_get_clean();
}

4
@ মার্ক অ্যামেরি সত্য বলে মনে হচ্ছে আমি কেবল এটি সহজ করে তুলেছি।
hanshenrik

13

এছাড়াও echo json_encode($dataobject);সহায়ক হতে পারে


1
এই ক্ষেত্রে, আউটপুট খুব বিভ্রান্তিকর এবং আমার মতে ডিবাগ উদ্দেশ্য থেকে অনেক দূরে।
টোমা জ্যাটো - মনিকা

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

যাইহোক, json_encodeসমস্ত ডেটা var_dumpকরে না (উদাহরণস্বরূপ পরিবর্তনশীল ধরণের হিসাবে)। অন্তর্নির্মিত বিভিন্ন ফর্ম্যাট json_encodeহিসাবে একই তথ্য আউটপুট print_R
টোমা জ্যাটো - মনিকা

1
ঠিক আছে, আমি আরও একবার এটি ব্যাখ্যা করব । ওটি জানিয়েছে যে তার আউটপুট দরকার var_dump। তিনি আরও বলেছিলেন যে print_Rএটি তার প্রয়োজনের জন্য অপর্যাপ্ত তথ্য সরবরাহ করে। তথ্যের মধ্যে কোনও সত্যিকারের পার্থক্য নেই যা সরবরাহ করে json_encodeএবং print_r- কেবলমাত্র ডেটা ফর্ম্যাটটি আলাদা। এটি দেওয়া, যদি print_rঅপর্যাপ্ত হয়, তাই হয় json_encode। ডাউনওট সম্পর্কে আর অভিযোগ করবেন না দয়া করে। এটি স্পষ্টতই এলোমেলো ক্লিক নয়, তাই এটি মোকাবেলা করুন।
টোমা জ্যাটো - মনিকা

9

পিএইচপি ম্যানুয়াল থেকে :

এই ফাংশনটি এক বা একাধিক এক্সপ্রেশন সম্পর্কে কাঠামোগত তথ্য প্রদর্শন করে যা এর ধরণ এবং মানকে অন্তর্ভুক্ত করে।

সুতরাং, এখানে পিএইচপি'র আসল রিটার্ন সংস্করণ var_dump(), যা আসলে একটি পরিবর্তনশীল-দৈর্ঘ্যের আর্গুমেন্ট তালিকা গ্রহণ করে:

function var_dump_str()
{
    $argc = func_num_args();
    $argv = func_get_args();

    if ($argc > 0) {
        ob_start();
        call_user_func_array('var_dump', $argv);
        $result = ob_get_contents();
        ob_end_clean();
        return $result;
    }

    return '';
}

1
আসল প্রশ্নের আসল উত্তর দেওয়ার জন্য +1। আমি এটি পড়ছি কারণ আমার var_dump দরকার, না var_portport, মুদ্রণ_আর, সিরিয়ালাইজ, json_encode, বা একটি সত্য ডিবাগার ger সেগুলিও কীভাবে ব্যবহার করতে হয় তা আমি জানি। ওপি ভার_ডাম্পের জন্য জিজ্ঞাসা করেছে, আমার ভার_ডাম্প দরকার। ধন্যবাদ!
স্ল্যাশব্যাক

আপনি যদি var_dump এ সত্যে থাকতে চান তবে আপনাকে অবশ্যই ট্রিগার_অরার ("var_dump_str () এর জন্য ভুল পরামিতি গণনা") করতে হবে; যখন আরগসি <= 0; বা আরও ভাল, আপনার জন্য var_dump এটি করতে হবে। : পি
হাশেনেরিক

এটি ইতিমধ্যে গ্রহণযোগ্য উত্তরে ছিল না এমন অনেক কিছুই যুক্ত করে। এখানে $argcচেক অপ্রয়োজনীয় এবং তাত্ক্ষণিকভাবে ভুল হিসাবে @hanshenrik দ্বারা চিহ্নিত হিসাবে চিহ্নিত করা হয়েছে, এবং একবার আপনি এটি সরিয়ে ফেললে আপনি সত্যিই যুক্ত করছেন সমস্তগুলি হল call_user_func_arrayএবং func_get_argsকলগুলি।
মার্ক অ্যামেরি

5

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


5

এখানে একটি ফাংশন হিসাবে সম্পূর্ণ সমাধান:

function varDumpToString ($var)
{
    ob_start();
    var_dump($var);
    return ob_get_clean();
}

2
1 টিরও বেশি ভেরিয়েবল দিয়ে কাজ করবে না ... var_dump ("foo", "বার") => স্ট্রিং (3) "foo" স্ট্রিং (3) "বার" varDumpToString ("foo", "বার") => স্ট্রিং (3) "
ফু

2

এটি সম্ভবত কিছুটা বন্ধ বিষয়।

আমি আমার পিএইচপি-এফপিএম ধারকটির ডকার লগে এই জাতীয় তথ্য লেখার একটি উপায় খুঁজছিলাম এবং নীচে স্নিপেট নিয়ে এসেছি। আমি নিশ্চিত এটি ডকার পিএইচপি-এফপিএম ব্যবহারকারীরা ব্যবহার করতে পারবেন।

fwrite(fopen('php://stdout', 'w'), var_export($object, true));

1
হ্যান্ডেলটি কখনও বন্ধ হয় না, সুতরাং এটি রিসোর্স লিক, যা দীর্ঘকাল ধরে চলমান ডেমন-স্টাইলের স্ক্রিপ্টগুলিতে সমস্যা হতে পারে। তবে চেষ্টা করুনfile_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
hanshenrik

0

আমি সত্যই var_dump()ভার্বোজ আউটপুট পছন্দ করি এবং var_export()এর বা print_r()আউটপুট নিয়ে সন্তুষ্ট নই কারণ এটি তত বেশি তথ্য দেয় নি (যেমন ডেটা টাইপ অনুপস্থিত, দৈর্ঘ্য অনুপস্থিত)।

সুরক্ষিত এবং পূর্বাভাসযোগ্য কোড লিখতে, কখনও কখনও এটি একটি খালি স্ট্রিং এবং নাল মধ্যে পার্থক্য করতে দরকারী। বা একটি 1 এবং একটি সত্য মধ্যে। বা একটি নাল এবং একটি মিথ্যা মধ্যে। সুতরাং আমি আমার তথ্য টাইপ আউটপুট চাই।

যদিও সহায়ক, আমি var_dump()এইচটিএমএল ট্যাগ ব্যতীত সমস্ত বর্ণ সহ রঙিন আউটপুটটিকে একটি মানব-পঠনযোগ্য আউটপুটকে স্ট্রিংয়ে রূপান্তর করতে বিদ্যমান প্রতিক্রিয়ারগুলিতে একটি পরিষ্কার এবং সহজ সমাধান খুঁজে পাইনি var_dump()

মনে রাখবেন যে আপনার যদি রঙিন থাকে var_dump()তবে এর অর্থ হ'ল আপনি এক্সডিবাগ ইনস্টল করেছেন যা var_dump()এইচটিএমএল রঙ যুক্ত করতে পিএইচপি এর ডিফল্টকে ওভাররাইড করে ।

যে কারণে, আমি আমার যা প্রয়োজন ঠিক তা দিয়ে এই সামান্য প্রকরণটি তৈরি করেছি:

function dbg_var_dump($var)
    {
        ob_start();
        var_dump($var);
        $result = ob_get_clean();
        return strip_tags(strtr($result, ['=&gt;' => '=>']));
    }

নীচের সুন্দর স্ট্রিংটি ফেরৎ:

array (size=6)
  'functioncall' => string 'add-time-property' (length=17)
  'listingid' => string '57' (length=2)
  'weekday' => string '0' (length=1)
  'starttime' => string '00:00' (length=5)
  'endtime' => string '00:00' (length=5)
  'price' => string '' (length=0)

আশা করি এটি কাউকে সাহায্য করবে।


-2

Http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html থেকে :

var_dump এবং print_r ফাংশন কেবল ব্রাউজারে সরাসরি আউটপুট দিতে পারে। সুতরাং এই ফাংশনগুলির আউটপুট কেবল পিএইচপি-র আউটপুট নিয়ন্ত্রণ ফাংশন ব্যবহার করে পুনরুদ্ধার করা যায়। আউটপুট সংরক্ষণের জন্য নীচের পদ্ধতিটি কার্যকর হতে পারে।

function assignVarDumpValueToString($object) {
    ob_start();
    var_dump($object);
    $result = ob_get_clean();
    return $result;
}

ob_get_clean () কেবলমাত্র অভ্যন্তরীণ বাফারে প্রবেশ করা শেষ ডেটা সাফ করতে পারে। সুতরাং আপনার একাধিক এন্ট্রি থাকলে ob_get_contents পদ্ধতি কার্যকর হবে।

উপরের মত একই উত্স থেকে:

function varDumpToErrorLog( $var=null ){
    ob_start();                    // start reading the internal buffer
    var_dump( $var);          
    $grabbed_information = ob_get_contents(); // assigning the internal buffer contents to variable
    ob_end_clean();                // clearing the internal buffer.
    error_log( $grabbed_information);        // saving the information to error_log
}

1
আপনি যখন অন্য উত্স থেকে উপাদান উদ্ধৃত করছেন দয়া করে সঠিকভাবে নির্দেশ করুন। সম্পাদন করা আমি সম্পর্কে আছি এর আগে এই উত্তরটি একটি উদ্ধৃতি হিসাবে ফর্ম্যাট একটি অংশ মাত্র অংশ আপনিই করা হয়নি কারো ব্লগ থেকে কপি করে পেস্ট করুন।
মার্ক অ্যামেরি

-2

দীর্ঘ স্ট্রিং : এর echo($var);পরিবর্তে কেবল ব্যবহার করুন dump($var);

অবজেক্ট বা অ্যারে :var_dump('<pre>'.json_encode($var).'</pre>);'

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