আউটপুট বাফারিং কী?


উত্তর:


274

ওয়েব বিকাশকারীদের জন্য আউটপুট বাফারিং, একটি শিক্ষানবিশ গাইড :

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

ওয়েব বিকাশকারীদের আউটপুট বাফারিংয়ের সুবিধা

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

6
+1 টি। এখানে আরেকটি সহায়ক লিঙ্ক রয়েছে: php.net/manual/en/function.ob-start.php - এমন কোনও ফাংশন নিয়ে কাজ করার ক্ষেত্রেও কার্যকর যখন আপনি যে ভেরিয়েবলের পরিবর্তে সঞ্চয় করতে চান এমন কোনও মূল্য প্রতিপন্ন করে
ক্যাম

সত্যিই কি সবকিছু শেষ পর্যন্ত বাফার হয়েছে, বা যদি আমার কাছে একটি দীর্ঘসূত্র দীর্ঘ পৃষ্ঠা থাকে তবে পৃষ্ঠাটি খণ্ডগুলিতে চলে আসবে?
zedoo

5
আপনি যদি আউটপুট বাফারিং শুরু করেন তবে @জেডো ob_start(), সত্যিই সমস্ত কিছু বাফার হয়েছে। সেখানে একটি ঐচ্ছিক দ্বিতীয় প্যারামিটার ob_start(), int $chunk_sizeযা সেট করেন তাহলে, কারণ হবে বাফার কোন আউটপুট কল যা সমান বাফার দৈর্ঘ্য ঘটায় বা এই মাপের অতিক্রম পর রাঙা করা হবে।
কুড়াল

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

5
আমি কেবল বাফারিং ব্যবহারের অ্যাডভেন্টেজগুলি দেখি, তবে পিএইচপি তে এটি ডিফল্টরূপে সক্ষম হয় না কেন?
টমাস বান্দেরাস

69

আউটপুট বাফারিং পিএইচপি দ্বারা কর্মক্ষমতা উন্নত করতে এবং কয়েকটি কৌশল সম্পাদন করতে ব্যবহৃত হয়।

  • আপনার পিএইচপি স্টোর সমস্ত আউটপুট একটি বাফারে এবং আউটপুট এটিকে নেটওয়ার্ক পারফরম্যান্সের উন্নতি করতে পারে।

  • আপনি কিছু পরিস্থিতিতে ব্রাউজারে ফেরত না পাঠিয়ে বাফার সামগ্রীটি অ্যাক্সেস করতে পারেন।

এই উদাহরণ বিবেচনা করুন:

<?php
    ob_start( );
    phpinfo( );
    $output = ob_get_clean( );
?>

উপরের উদাহরণটি ব্রাউজারে প্রেরণের পরিবর্তে আউটপুটটিকে ভেরিয়েবলের ক্যাপচার করে। আউটপুট_বাফারিং ডিফল্টভাবে বন্ধ করা হয়।

  • আপনি যখন সামগ্রী পাঠানোর পরে শিরোনাম সংশোধন করতে চান আপনি পরিস্থিতিতে আউটপুট বাফারিং ব্যবহার করতে পারেন।

এই উদাহরণ বিবেচনা করুন:

<?php
    ob_start( );
    echo "Hello World";
    if ( $some_error )
    {
        header( "Location: error.php" );
        exit( 0 );
    }
?>

অক্ষ হিসাবে এখানে একই প্রশ্ন: পরে আউটপুট বন্ধ না করে আউটপুট বাফারিং শুরু হচ্ছে না, আপনার স্ক্রিপ্টকে সব ধরণের সমস্যার মধ্যে চালিত করবে?
এডওয়ার্ড স্টাম্পার্ড

1
আপনি যখন ফ্লাশ পদ্ধতিগুলির একটিতে কল করেন বাফারটি ফ্লাশ করা হয় (যেমন ob_flush()বা ob_end_flush())। হঠাৎ করে বা অন্যথায় আপনার স্ক্রিপ্টটি শেষ হলে বাফারের সামগ্রীগুলিও ফ্লাশ হয়ে যায় যাতে কোনও সমস্যা হওয়া উচিত নয়।
সালমান এ

17

আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি ভিজ্যুয়াল শিখার জন্য আমার উত্তরটি লিখতে চেয়েছিলাম। বিশ্বব্যাপী-ওয়েবে আউটপুট বাফারিংয়ের ব্যাখ্যা দেওয়ার মতো কোনও চিত্র আমি পাইনি তাই আমি উইন্ডোতে নিজেই একটি চিত্র তৈরি করেছি mspaint.exe

যদি আউটপুট বাফারিং বন্ধ থাকে তবে echoতাৎক্ষণিকভাবে ব্রাউজারে ডেটা প্রেরণ করা হবে।

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

যদি আউটপুট বাফারিং চালু থাকে, তবে কোনও echoব্রাউজারে প্রেরণের আগে আউটপুট বাফারে ডেটা প্রেরণ করবে।

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

phpinfo

আউটপুট বাফারিং চালু / বন্ধ আছে কিনা তা দেখার জন্য দয়া করে মূল বিভাগে phpinfo দেখুন। output_bufferingডিরেক্টিভের আপনাকে বলতে হবে যদি আউটপুট বাফার উপলব্ধ চালু / বন্ধ আছে।

এখানে চিত্র বর্ণনা লিখুন এই ক্ষেত্রে output_bufferingমান 4096 যার অর্থ বাফার আকার 4 কেবি। এর অর্থ হ'ল ওয়েব সার্ভারে আউটপুট বাফারিং চালু আছে।

php.ini

output_bufferingনির্দেশকের মান পরিবর্তন করে বাফার আকারটি চালু / বন্ধ করা এবং পরিবর্তন করা সম্ভব । কেবল এটি সন্ধান করুন php.ini, এটি আপনার পছন্দের সেটিংয়ে পরিবর্তন করুন এবং ওয়েব সার্ভারটি পুনরায় চালু করুন। আপনি আমার php.iniনীচের একটি নমুনা খুঁজে পেতে পারেন ।

; Output buffering is a mechanism for controlling how much output data
; (excluding headers and cookies) PHP should keep internally before pushing that
; data to the client. If your application's output exceeds this setting, PHP
; will send that data in chunks of roughly the size you specify.
; Turning on this setting and managing its maximum buffer size can yield some
; interesting side-effects depending on your application and web server.
; You may be able to send headers and cookies after you've already sent output
; through print or echo. You also may see performance benefits if your server is
; emitting less packets due to buffered output versus PHP streaming the output
; as it gets it. On production servers, 4096 bytes is a good setting for performance
; reasons.
; Note: Output buffering can also be controlled via Output Buffering Control
;   functions.
; Possible Values:
;   On = Enabled and buffer is unlimited. (Use with caution)
;   Off = Disabled
;   Integer = Enables the buffer and sets its maximum size in bytes.
; Note: This directive is hardcoded to Off for the CLI SAPI
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
; http://php.net/output-buffering
output_buffering = 4096

output_bufferingআউটপুট বাফারিং সম্পর্কিত একমাত্র নির্দেশিকাটিই নির্দেশিকা নয়। আপনি এখানে অন্য কনফিগারযোগ্য আউটপুট বাফারিংয়ের নির্দেশিকা দেখতে পারেন: http://php.net/manual/en/outcontrol.configration.php

উদাহরণ: ob_get_clean ()

নীচে আপনি echoকোনও ব্রাউজারে প্রেরণের আগে এটি কীভাবে ক্যাপচার এবং তা পরিচালনা করতে পারেন তা দেখতে পারেন ।

// Turn on output buffering  
ob_start();  

echo 'Hello World';  // save to output buffer

$output = ob_get_clean();  // Get content from the output buffer, and discard the output buffer ...
$output = strtoupper($output); // manipulate the output  

echo $output;  // send to output stream / Browser

// OUTPUT:  
HELLO WORLD

উদাহরণ: হ্যাকিংউইথপিএইচ

উদাহরণ সহ আউটপুট বাফার সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে:

http://www.hackingwithphp.com/13/0/0/output-buffering


9

স্ক্রিপ্ট থেকে আউটপুট প্রেরণ করা হলে আউটপুট নিয়ন্ত্রণ ফাংশন আপনাকে নিয়ন্ত্রণ করতে দেয়। এটি বেশ কয়েকটি বিভিন্ন পরিস্থিতিতে কার্যকর হতে পারে, বিশেষত যদি আপনার স্ক্রিপ্ট ডেটা আউটপুট তৈরি শুরু করার পরে আপনাকে ব্রাউজারে হেডার পাঠাতে হয় send আউটপুট নিয়ন্ত্রণ ফাংশনগুলি হেডার () বা সেটকুকি () ব্যবহার করে পাঠানো শিরোনামগুলিকে প্রভাবিত করে না, কেবলমাত্র ইকো () এবং পিএইচপি কোডের ব্লকের মধ্যে ডেটা হিসাবে ফাংশনগুলি।

http://php.net/manual/en/book.outcontrol.php

আরও সংস্থানসমূহ:

পিএইচপি সহ আউটপুট বাফারিং



1
ob_start();  // turns on output buffering
$foo->bar();  // all output goes only to buffer
ob_clean();  // delete the contents of the buffer, but remains buffering active
$foo->render(); // output goes to buffer
ob_flush(); // send buffer output
$none = ob_get_contents();  // buffer content is now an empty string
ob_end_clean();  // turn off output buffering

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

এখানে সুন্দরভাবে ব্যাখ্যা করা হয়েছে: https://phpfashion.com/everything-about-output-buffering-in-php


0

আপডেট করুন 2019. আপনার যদি ডেডিকেটেড সার্ভার এবং এসএসডি বা আরও ভাল এনভিএম, 3.5 জিএইচজেড থাকে। 100ms-150ms এ দ্রুত লোড হওয়া ওয়েবসাইট তৈরি করতে আপনার বাফারিং ব্যবহার করা উচিত নয়।

পারফরম্যান্স সার্ভার (সেভারস, মেমরি, ডিস্ক) এবং এপিসি পিএইচপি চালু করার সাথে সাথে 2019 এ স্ক্রিপ্ট সংগ্রহের চেয়ে বেকোস নেটওয়ার্ক ধীরে ধীরে রয়েছে এবং উত্পাদিত স্ক্রিপ্টটিতে কখনও কখনও কেবল 70 মিমি প্রয়োজন হয় কেবলমাত্র নেটওয়ার্ক সময় লাগে 10 মাইল থেকে শুরু করে 150 মিমি অবধি ব্যবহারকারী-সার্ভার।

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

আপনি যদি jpg ব্যবহার করে লোডিং করতে চান তবে এটি স্বয়ংক্রিয়ভাবে এবং ক্র্যাশ প্রেরণটি ফ্লাশ করতে পারে দয়া করে বেকারফুল আউটপুট_বাফারিংয়ের সীমা রয়েছে Please

চিয়ার্স।

আপনি দ্রুত নদী তৈরি করতে পারেন বা আপনি নিরাপদে তামা তৈরি করতে পারেন :)

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