درود مجدد

نقل قول نوشته اصلی توسط AtrafNet نمایش پست ها
سلام

تابع ob_start حالت Output Buffering رو در PHP فعال میکنه و تا زمانی که این حالت فعال باشه تمامی خروجی های HTML چاپ شده (مثل توابع echo و print یا html معمولی و...) به جز HTTP Header ها نادیده گرفته میشن تا باعث ایجاد تداخل بین زمان ارسال HTTP Header ها و خروجی HTML نشن چون همونطور که شاید بدونید HTTP Header ها حتماً باید قبل از ارسال حتی یه حرف از خروجی HTML به مرورگر ارسال شده باشن و اگر مثلاً خروجی HTML ارسال شده باشه و شما بخواید بعدش با تابع header یک HTTP Header هم ارسال کنید با اخطار Header Already Sent در PHP مواجه میشید.

تابع ob_start نیازمند اتمام با یکی از توابع ob_end_flush یا ob_end_clean هست تا حالت Output Buffering دوباره غیرفعال بشه اما بین این دو تابع که کار اتمام بافر رو انجام میدن تفاوتی که هست اینه که تابع ob_end_flush علاوه بر حذف بافر ذخیره شده از خروجی های که تا الان نادیده گرفته شدن، اون ها رو برای کاربر هم آخر سر ارسال میکنه ولی تابع ob_end_clean فقط بافر رو کاملاً از حافظه حذف میکنه و دیگه هیچی از خروجی هایی که حین فعال بودن حالت Output Buffering نادیده گرفته شدن برای کاربر ارسال نمیشن.


منابع:
http://php.net/manual/en/function.ob-start.php
http://php.net/manual/en/function.ob-end-flush.php
http://php.net/manual/en/function.ob-end-clean.php


استفاده بی دلیل از این توابع فقط تنبلی برنامه نویس در خطایابی ها و موقعیت سنجی های مناسب برای ابتدا ارسال HTTP Header ها و سپس ارسال خروجی HTML رو می رسونه اما در بعضی موارد خاص ممکنه برنامه نویس حرفه ای هم نتونه زمان بندی مشخص رو به دلایلی پیش بینی کنه و مجبور میشه از این توابع که استثنایی رو براش ایجاد میکنن استفاده کنه.
ممنون از پاسخ کاملتون.

یعنی با این حساب فایل php ای که توش هیچ echo یا print یا HTML یا حتی Header ای نیست اصلا احتیاجی به Output Buffering نداره؟

تشکر