طريقة ممتازة، وهي تعتمد على إحدى ميزات PHP (التي لا يبدو أن الكثير يعرفونها) حيث أن الدالة ob_start تقوم بتحفيز PHP لتشغيل حاجز المخرجات (ذاكرة المخرجات المؤقتة)، إذا أن مفسر PHP في الأساس يقوم بإرسال كل ما يتجمع لديها من مخرجات أولاً بأول (للمستعرض مثلاً)، ولكن مع تشغيل حاجز المخرجات باستخدام الدالة ob_start سيقوم PHP بحجز كل ما يصل إليه من مخرجات في ذاكرة مؤقتة يطلق عليها output buffer ولن يرسلها حتى تقوم بتشغيل أمر ob_flush، كما يمكن بسهولة تحويل هذه المخرجات إلى منفذ آخر (كأن يتم حفظها على ملف) وذلك باستخدام الدالة ob_get_contents ومن ثم إلغاء عملية الحجز وتصفية ذاكرة المخرجات المؤقتة باستخدام الدالة ob_end_clean.
توجد العديد من الميزات والاستخدامات لهذه الطريقة، ومن أهمها مثلاً أنه بالإمكان تجاوز مشكلة إرسال عبارات header متأخرة بجميع أنواعها والذي يعاني منها الكثيرون عندما يجدون رسالة headers already sent، حيث يقوم مفسر PHP بإعادة ترتيب المخرجات بشكلها الصحيح عند حجزها وإفراغها فيتم إرسال عبارات الرأس أولاً ثم المخرجات الأخرى، مثال:
كود PHP:
<?php
// حجز المخرجات
ob_start();
?>
<html>
<body> whatever </body>
</html>
<?php
if (!isset($dummy))
header('location: http://www.swalif.net/softs');
// إرسال المخرجات، وسيقوم
// بترتيب المخرجات حيث تصبح عبارات الرأس
// header
// أولاً قبل النص، ولن تظهر عبارات الأخطاء
ob_end_flush();
?>
__________________
visualmind (at) php.net
أعتذر كثيراً عن غيابي من المشاركات والذي لن يطول أكثر إن شاء الله.