نمایش نتایج: از شماره 1 تا 7 , از مجموع 7

موضوع: سوال در مورد ob_start

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    عضو انجمن
    تاریخ عضویت
    Jul 2014
    نوشته ها
    199
    تشکر تشکر کرده 
    118
    تشکر تشکر شده 
    75
    تشکر شده در
    70 پست

    پیش فرض پاسخ : سوال در مورد ob_start

    درود مجدد

    نقل قول نوشته اصلی توسط 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 نداره؟

    تشکر

  2. #2
    عضو انجمن AtrafNet آواتار ها
    تاریخ عضویت
    Nov 2016
    نوشته ها
    259
    تشکر تشکر کرده 
    2,584
    تشکر تشکر شده 
    729
    تشکر شده در
    417 پست

    پیش فرض پاسخ : سوال در مورد ob_start

    نقل قول نوشته اصلی توسط naghmesra نمایش پست ها
    درود مجدد



    ممنون از پاسخ کاملتون.

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

    تشکر
    اصولاً نه چون همونطور که گفتم ویژگی Output Buffering همونطور که از اسمش معلومه (که یعنی خروجی که Output بشه رو به صورت موقت Buffer میکنه) فقط برای مواقعیه که خروجی وجود داره اما به دلایلی نمی خواین در اون زمان ارسال و چاپ بشه.

    وگرنه اگر پروژه معمولی دارید که همه چیز روی حساب کتابه و مشخصه که چه وقتی خروجی ها ارسال میشه مسلماً نیازی به بافر کردن موقت خروجی ها و آخر سر رها کردن این بافر نیست و تازه اگر نیاز نباشه ولی این کار رو انجام بدید فقط سربار اضافی هم به PHP و هم به حافظه RAM سرور اضافه کردید.

  3. تعداد تشکر ها از AtrafNet به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. تابع ob_start در php امنه؟
    توسط vahid13713 در انجمن PHP-MySQL
    پاسخ ها: 4
    آخرين نوشته: September 6th, 2016, 00:46
  2. پاسخ ها: 15
    آخرين نوشته: July 26th, 2012, 14:16
  3. سوال و راهنمایی در مورد دیتاسنتر Equinix سوئیس
    توسط logofun در انجمن سرور اختصاصی
    پاسخ ها: 69
    آخرين نوشته: July 27th, 2011, 23:32
  4. سوئیچینگ و سوئیچ سیسکو Switching
    توسط royalserver.ir در انجمن سیسکو Cisco
    پاسخ ها: 0
    آخرين نوشته: February 9th, 2011, 12:22

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •