تابع ()ob در php

سوال

سلام چرا وقتی کد زیر رو با ob_flush می نویسم نتیجه ی ob_get_contentبرابرباbمیشه اما اگه همین کد فقط بجای ob_flushبنویبسیم ob_end_flushنتیجه محتویات بافر یا همونob_get_contentبرابر با abمیشه؟ مگه نبایدend_flushمحتویات قبلی از بین ببره ؟اما برعکس شده

ob_start()
echo 'a';
ob_flush();
echo 'b';
echo ob_get_content();

 

حل شد 0
2019-05-27T21:58:46+03:30 1 پاسخ ها کاربر تازه 0

پاسخ ( 1 )

    0
    2019-05-27T23:18:58+03:30

    سلام

    توضیحات رو مطالعه کنید:

    توابع output boffer(ob) به صورت زیر هستند:

    • ob_start => آماده سازی بافر
    • ob_flush=> هر مقداری که در بافر هست رو ارسال میکنه
    • ob_get_contents => محتوای موجود در بافر رو fetch میکنه
    • ob_end_clean => بافر جاری رو میبنده و از حافظه پاک میکنه
    • ob_end_flush => بافر جاری رو میبنده و چاپ میکنه

    حالا مثال زیر رو در نظر بگیرید:

    <?php
    
    ob_start();
    
    echo "Hello ";
    
    $out1 = ob_get_contents();
    
    echo "World";
    
    $out2 = ob_get_contents();
    
    ob_end_clean();
    
    var_dump($out1, $out2);
    ?>

    خروجی دستور بالا میشه:

    string(6) "Hello "
    string(11) "Hello World"

    حالا اگه بجای ob_end_clean از ob_end_flush استفاده کنید، بافر رو میبنده و مقدار موجود در داخل بافر رو چاپ میکنه.

    <?php
    ob_start();
    
    echo "Hello";
    
    $out1 = ob_get_contents();
    
    echo "World";
    
    $out2 = ob_get_contents();
    
    ob_end_flush();
    
    var_dump($out1, $out2);
    ?>

    و اگه ob_flush رو بعد از دستورات echo بنویسید، بافر رو ارسال و در خروجی نمایش میده.

    موفق باشید.

    بهترین پاسخ

ارسال یک پاسخ