উত্তর:
ওয়েব বিকাশকারীদের জন্য আউটপুট বাফারিং, একটি শিক্ষানবিশ গাইড :
আউটপুট বাফারিং (ডিফল্ট) ছাড়াই আপনার এইচটিএমএল আপনার স্ক্রিপ্টের মাধ্যমে পিএইচপি প্রক্রিয়া হিসাবে টুকরো টুকরো করে ব্রাউজারে প্রেরণ করা হয়। আউটপুট বাফারিংয়ের সাথে, আপনার এইচটিএমএল একটি পরিবর্তনশীলে সংরক্ষণ করা হয় এবং আপনার স্ক্রিপ্টের শেষে এক টুকরো হিসাবে ব্রাউজারে প্রেরণ করা হয়।
ওয়েব বিকাশকারীদের আউটপুট বাফারিংয়ের সুবিধা
- একা আউটপুট বাফারিং চালু করা আমাদের এইচটিএমএল ডাউনলোড এবং রেন্ডার করতে যে পরিমাণ সময় লাগে তা হ্রাস করে কারণ এটি পিএইচপি এইচটিএমএল প্রসেস করার কারণে এটি টুকরো টুকরো করে ব্রাউজারে প্রেরণ করা হচ্ছে না।
- আমরা পিএইচপি স্ট্রিংগুলির সাথে করতে পারি এমন অভিনব স্টাফগুলি, আমরা এখন আমাদের সম্পূর্ণ HTML পৃষ্ঠাকে একটি পরিবর্তনশীল হিসাবে করতে পারি।
- আপনি যদি কুকি সেট করার সময় "সতর্কতা: শিরোনামের তথ্যটি (আউটপুট) ইতিমধ্যে প্রেরিত" - এর শিরোনামটি পরিবর্তন করতে পারে না) বার্তার মুখোমুখি হয়ে থাকেন তবে আপনি জেনে খুশি হবেন যে আউটপুট বাফারিং আপনার উত্তর।
ob_start()
, সত্যিই সমস্ত কিছু বাফার হয়েছে। সেখানে একটি ঐচ্ছিক দ্বিতীয় প্যারামিটার ob_start()
, int $chunk_size
যা সেট করেন তাহলে, কারণ হবে বাফার কোন আউটপুট কল যা সমান বাফার দৈর্ঘ্য ঘটায় বা এই মাপের অতিক্রম পর রাঙা করা হবে।
আউটপুট বাফারিং পিএইচপি দ্বারা কর্মক্ষমতা উন্নত করতে এবং কয়েকটি কৌশল সম্পাদন করতে ব্যবহৃত হয়।
আপনার পিএইচপি স্টোর সমস্ত আউটপুট একটি বাফারে এবং আউটপুট এটিকে নেটওয়ার্ক পারফরম্যান্সের উন্নতি করতে পারে।
আপনি কিছু পরিস্থিতিতে ব্রাউজারে ফেরত না পাঠিয়ে বাফার সামগ্রীটি অ্যাক্সেস করতে পারেন।
এই উদাহরণ বিবেচনা করুন:
<?php
ob_start( );
phpinfo( );
$output = ob_get_clean( );
?>
উপরের উদাহরণটি ব্রাউজারে প্রেরণের পরিবর্তে আউটপুটটিকে ভেরিয়েবলের ক্যাপচার করে। আউটপুট_বাফারিং ডিফল্টভাবে বন্ধ করা হয়।
এই উদাহরণ বিবেচনা করুন:
<?php
ob_start( );
echo "Hello World";
if ( $some_error )
{
header( "Location: error.php" );
exit( 0 );
}
?>
ob_flush()
বা ob_end_flush()
)। হঠাৎ করে বা অন্যথায় আপনার স্ক্রিপ্টটি শেষ হলে বাফারের সামগ্রীগুলিও ফ্লাশ হয়ে যায় যাতে কোনও সমস্যা হওয়া উচিত নয়।
আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমি ভিজ্যুয়াল শিখার জন্য আমার উত্তরটি লিখতে চেয়েছিলাম। বিশ্বব্যাপী-ওয়েবে আউটপুট বাফারিংয়ের ব্যাখ্যা দেওয়ার মতো কোনও চিত্র আমি পাইনি তাই আমি উইন্ডোতে নিজেই একটি চিত্র তৈরি করেছি 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
উদাহরণ: হ্যাকিংউইথপিএইচ
উদাহরণ সহ আউটপুট বাফার সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে:
স্ক্রিপ্ট থেকে আউটপুট প্রেরণ করা হলে আউটপুট নিয়ন্ত্রণ ফাংশন আপনাকে নিয়ন্ত্রণ করতে দেয়। এটি বেশ কয়েকটি বিভিন্ন পরিস্থিতিতে কার্যকর হতে পারে, বিশেষত যদি আপনার স্ক্রিপ্ট ডেটা আউটপুট তৈরি শুরু করার পরে আপনাকে ব্রাউজারে হেডার পাঠাতে হয় send আউটপুট নিয়ন্ত্রণ ফাংশনগুলি হেডার () বা সেটকুকি () ব্যবহার করে পাঠানো শিরোনামগুলিকে প্রভাবিত করে না, কেবলমাত্র ইকো () এবং পিএইচপি কোডের ব্লকের মধ্যে ডেটা হিসাবে ফাংশনগুলি।
http://php.net/manual/en/book.outcontrol.php
আরও সংস্থানসমূহ:
নাম অনুসারে এখানে স্ক্রিপ্টের আউটপুট কীভাবে প্রদর্শিত হবে তা পরিচালনা করতে মেমরি বাফার ব্যবহার করা হয়।
বিষয়টির জন্য এখানে একটি খুব ভাল টিউটোরিয়াল রয়েছে
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
আপডেট করুন 2019. আপনার যদি ডেডিকেটেড সার্ভার এবং এসএসডি বা আরও ভাল এনভিএম, 3.5 জিএইচজেড থাকে। 100ms-150ms এ দ্রুত লোড হওয়া ওয়েবসাইট তৈরি করতে আপনার বাফারিং ব্যবহার করা উচিত নয়।
পারফরম্যান্স সার্ভার (সেভারস, মেমরি, ডিস্ক) এবং এপিসি পিএইচপি চালু করার সাথে সাথে 2019 এ স্ক্রিপ্ট সংগ্রহের চেয়ে বেকোস নেটওয়ার্ক ধীরে ধীরে রয়েছে এবং উত্পাদিত স্ক্রিপ্টটিতে কখনও কখনও কেবল 70 মিমি প্রয়োজন হয় কেবলমাত্র নেটওয়ার্ক সময় লাগে 10 মাইল থেকে শুরু করে 150 মিমি অবধি ব্যবহারকারী-সার্ভার।
সুতরাং আপনি যদি দ্রুত 150 মিমি হতে চান, বাফারিং ধীরে ধীরে করুন, বেকোউজের অতিরিক্ত সংগ্রহের অতিরিক্ত বাফার ডেটা প্রয়োজন যা এটি অতিরিক্ত ব্যয় করে। 10 বছর আগে যখন সার্ভার 1 টি স্ক্রিপ্ট তৈরি করে, তখন এটি কার্যকর ছিল।
আপনি যদি jpg ব্যবহার করে লোডিং করতে চান তবে এটি স্বয়ংক্রিয়ভাবে এবং ক্র্যাশ প্রেরণটি ফ্লাশ করতে পারে দয়া করে বেকারফুল আউটপুট_বাফারিংয়ের সীমা রয়েছে Please
চিয়ার্স।
আপনি দ্রুত নদী তৈরি করতে পারেন বা আপনি নিরাপদে তামা তৈরি করতে পারেন :)