اگر تا اواسط برنامه نویسی php رفته باشید،احتمالا سری نیز به کوچه بافر زده اید.به صورت خلاصه بافر به شما امکان می دهد تا خروجی مورد نظر را قبل از نمایش در مرورگر ،ذخیره کنید و یا آنرا تغییر دهید.پس در مواقعی می تواند حکم نوشدارو را داشته باشد.مثلا وقتی اطلاعاتی را به صورت صفحه بندی از دیتابیس می خوانید و برای کاربر نمایش می دهید.حالا هوس می کنید که امکان خروجی pdf را نیز فراهم کنید.کافیست درابتدای بخش نمایش اطلاعات،کار بافر کردن را شروع کنید و در انتها نیز آن را پایان دهید.حالا همین بخش را به تابعی pdf بفرستید تا فایل pdf را تحویل تان دهد.
البته قصد ما در این مطلب آموزش بافر در php نیست.بلکه می خواهیم ۴ تکنیک خوب و بدردبخور را معرفی کنیم که می توانید در عملیات بافر از آنها استفاده کنید.
به صورت ساده عمل بافر در php به صورت زیر انجام می شود:
<?php // start output buffering at the top of our script with this simple command // we've added "ob_postprocess" (our custom post processing function) as a parameter of ob_start ob_start('ob_postprocess'); ?> <html> <body> <p>Hello world!</p> </body> </html> <?php // end output buffering and send our HTML to the browser as a whole ob_end_flush(); // ob_postprocess is our custom post processing function function ob_postprocess($buffer) { // do a fun quick change to our HTML before it is sent to the browser return $buffer; } ?>
در مثال های بعدی از تابع ob_postprocess
استفاده می کنیم.
۱.بهینه سازی HTML با حذف فضاهای خالی
فضاهای خالی تکراری در هنگام نمایش در مرورگر،نادیده گرفته می شوند.اما کاربر نهایی شما مجبور است بایت به بایت آنها را دانلود کند.پس بهتر است آنها را پاک کنیم
function ob_postprocess($buffer)
{
$buffer = trim(preg_replace('/\s+/', ' ', $buffer));
return $buffer;
}
۲.فشرده سازی HTML با gzip
فشرده کردن خروجی بوسیله GZIP،توصیه اکید هر شخصی است که به کارایی وب سایت می اندیشد.
function ob_postprocess($buffer)
{
// check if the browser accepts gzip encoding. Most do, but just in case
if(strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE)
{
$buffer = gzencode($buffer);
header('Content-Encoding: gzip');
}
return $buffer;
}
۳.اضافه کردن acronyms به HTML
function ob_postprocess($buffer) { $acronyms['html'] = 'hypertext markup language'; $acronyms['css'] = 'cascading style sheets'; foreach($acronyms as $acronym => $meaning) { $buffer = preg_replace('/(\b' . $acronym . '\b)(?=[^>]*<)/i', '<acronym title="' . $meaning . '">\\1</acronym>', $buffer); } return $buffer; }
۴.انکود کردن کاراکترها
function ob_postprocess($buffer) { // add styled double quotes $buffer = preg_replace('/"(?=[^>]*<)([^"]*)"(?=[^>]*<)/u', '“\\۱”', $buffer); // add styled apostrophes $buffer = preg_replace("/'(?=[^>]*<)/i", "’", $buffer); // add ellipses $buffer = str_replace('...', '…', $buffer); // encode ampersands $buffer = str_replace('&', ' & ', $buffer); return $buffer; }
خیلی ممنون.حال کردم
منون از مطلب مفیدتون. فقط یک مشکلی اینجا هست که اگر از “//” برای کامنت کردن در قسمت های جاوا اسکریپت صفحه استفاده کرده باشی . کد های بعد از اون دیگه اجرا نمیشه.
ممنونم . خوشحالم مفید بوده . شاید با استفاده از تابع
addslashes()
بشه این مشکل رو حل کردممنون
بسیار عالی ممنون
فقط کاش توض۱یحات بیشتری می دادید
مخصوصاً درباره acronyms
بسیار جالب و خواندنی منبع رو هم می گفید بد نبود ولی در دات نت ما بافر نداریم ولی بجاش می گیم اطلاعات رو باید کش کرد ( cache)
ممنون.ولی فکر کنم کش شما با بافر ما فرق داره دوست من 🙂
اگر نحوه کش در asp.net رو هم بفرمایید،ما حتما منتشر می کنیم
موفقیت