Ob_start - Chiqish buferlashni yoqish. Ob_start - Chiqish buferlashni yoqish Reins search php start

Uy / Buzilishlar

Men tushunganimdek, sayt ramkadan foydalanmasdan yaratiladimi? Aks holda, men bilgan ishlab chiquvchilar mening quloqlarimga Yii ramkasini o'rganishim kerakligi haqida shovqin-suron aytishdi.

2) Men so'ramoqchi edim ... Kursda muhokama qilinadigan onlayn-do'kon yaratishga misol, bu ko'proq akademikmi? Haqiqiy tijorat loyihalari, ehtimol, ramkalar yordamida yaratilgan, chunki... bu standart kod shablonlaridan foydalanish orqali ishlab chiqish jarayonini sezilarli darajada optimallashtiradi. Bu savolga javob nima sodir bo'layotganini aniqlashga yordam beradi... PHP Start | Umumiy mantiqni tushunish uchun amaliyotni bajarishga arziydimi?

Javob:

1) Do'stlar, bu to'g'ri, men ham shunday deb o'ylayman. Ammo har qanday ramka tayyorgarlikni talab qiladi, masalan, bilim. Amalda MVC tizimini qurganimda, men ramkalarda qo'llaniladigan yondashuvlarga amal qilishga harakat qildim. Shuning uchun, PHP Start (nazariya va amaliyot) tayyorgarlikda yordam beradi, shundan so'ng siz yii2 (yoki shunga o'xshash narsalarni) xavfsiz o'rganishni boshlashingiz mumkin.

Loyiha omborining manzili:

№1 savol:

Men xatolikdan qutulolmayman:

Eslatma: 10-qatordagi /Users/Elios/Sites/Test/index.php da "_FILE_" qabul qilingan aniqlanmagan doimiy _FILE_ dan foydalanish

Ayting-chi, bu nima bo'lishi mumkin?

Javob:

Oldin va keyin FILE 2 ta belgi yozishingiz kerak _

__FILE__"sehrli" PHP konstantalariga tegishli. Batafsil bu yerda.

PHP bir qatorni boshqa qatorda qidiradigan bir nechta funksiyalarni taqdim etadi. Ba'zilar topilgan satrning o'rnini qaytaradi (strpos , strrpos va tegishli) va asl satrning bir qismini qaytaradi (strstr va strrchr). Agar siz qidirayotgan satr bo'lsa, qidiruv funktsiyalari noto'g'ri natijani qaytaradi topilmadi asl ichida.

Agar sizning maqsadingiz oddiygina bitta satr boshqasida mavjudligini aniqlash bo'lsa, eng samarali variant - strpos.

strpos

Strpos funktsiyasi o'zining birinchi qator argumentini ikkinchisi uchun qidiradi va satr ichidagi birinchi moslikning nolga asoslangan indeks manzilini qaytaradi, agar topilmasa, noto'g'ri. Quyidagi misol ko'rsatadi:

$str = ; // $str ichida "ehtiyoj" so'zining birinchi takrorlanishini qidiring$pos = strpos($str, "kerak"); // displey turi va $pos qiymati var_dump ($pos);

// int (3)

Natijani yuqorida var_dump yordamida ko'rsatgan bo'lsak ham, strpos uchun qaytarish qiymatining odatiy tekshiruvi quyidagicha amalga oshiriladi: if ( $pos !== false ) ( // agar qidiruv satri topilsa echo "uni $pos manzilida topdim" ; ) else ( echo "topilmadi" ; )

Strpos funksiyasining qaytaruvchi qiymatini false bilan solishtirish uchun === yoki !== operatorlaridan foydalanganingizga ishonch hosil qiling. Agar pastki qator satr boshida topilsa, strpos 0 ni qaytaradi, bu esa == yoki != operatorlaridir. yolg'onga aylanadi.

Ushbu misolda ko'rsatilgandek, qator boshidan ma'lum miqdordagi belgilarni qidirishni boshlash uchun ofsetni belgilashingiz mumkin:

/* strpos argumentlari: * mavzu satri (aka haystack), qidiruv satri (igna), ofset (ixtiyoriy) */ // $str dagi 10-belgidan “kerak” ni qidirishni boshlang$pos = strpos ($str , "kerak" , 10 );

// 20

Qidiruvni 10-belgidan boshlaganda, natija 20, so'z ignasi boshlanishining indeks joyi.

strrpos

strrpos funksiyasi satrdagi pastki satrning oxirgi paydo bo'lish o'rnini topadi:// qidiruvlar uchun foydalanish uchun misol qatori $str =; "Biz ignani pichanzordan topishimiz kerak."// $str da "ehtiyoj" so'nggi paydo bo'lgan joyni toping

$pos = strrpos($str, "kerak");

// 20 strrpos funktsiyasi ijobiy yoki salbiy bo'lishi mumkin bo'lgan ixtiyoriy ofset parametrini ham ta'minlaydi. Agar ofset ijobiy bo'lsa, satr boshidagi belgilar soni qidiruvdan chiqarib tashlanadi. Quyidagi misolni ko'rib chiqing:

// birinchi 3 ta belgidan tashqari "Biz" ni o'ngdan qidiring

$pos = strrpos ($str , "Biz" , 3 );

var_dump ($pos);//bool(noto'g'ri) Natija noto'g'ri, chunki qidiruvda dastlabki uchta belgi chiqarib tashlanganda "Biz" topilmaydi. Agar ofset salbiy bo'lsa, qator oxiridagi ko'plab belgilar qidiruvdan chiqarib tashlanadi. Biz salbiy ofsetni ko'rsatadigan ikkita qidiruv bilan ko'rsatamiz:

// oxirgi 5 ta belgidan tashqari "hay" ni o'ngdan qidiring

$pos = strrpos ($str , "hay" , - 5 );

// int (34)

// oxirgi 10 ta belgidan tashqari o'ngdan qidirish

strrpos funksiyasi satrdagi pastki satrning oxirgi paydo bo'lish o'rnini topadi:// qidiruvlar uchun foydalanish uchun misol qatori $str =; // "biz" ni katta-kichik harflarsiz qidirish$pos = stripos($str, "biz"); // int (0)// "Need" uchun o'ngdan katta-kichik harflarsiz qidiruvni amalga oshiring

$pos = strripos($str, "Kerak");

// int (20)

"Biz" harfini hisobga olmaydigan qidiruv natijasida 0 , bu biz qidirayotgan qatorning boshida topilganligini bildiradi. O'ngdan "Need" ni katta-kichik harflarsiz qidirish (strripos yordamida), uni 20-joyda topadi.

strstr $str = strstr funktsiyasi birinchi qator argumentini ikkinchisi uchun qidiradi. Agar ikkinchisi birinchisida topilsa, strstr asl satrning birinchi topilgan hodisadan boshlab satr oxirigacha bo'lgan qismini qaytaradi. // misol qatori $str =

;

// $str ichida "the" ni qidiring $newstr = strstr ($str , "the" ) ; var_dump ($newstr);// string(27) "pichandagi igna."

strstr funksiyasi asl satrning qolgan qismi bilan birga topilgan birinchi "the" ni qaytaradi. Agar siz strstr ga uchinchi argument sifatida true ni o'tkazsangiz, asl satrning qismi oldin

topilgan satr qaytariladi:

// $str ning "the" dan oldingi qismini qaytarish uchun true qiymatini kiriting.

$newstr = strstr ($str , "the" , true );

var_dump ($newstr);

strstr $str =; // string (16) "Biz topishimiz kerak" Bu safar strstr funksiyasi satrdagi birinchi "the" dan oldin hamma narsani qaytaradi.

PHP, shuningdek, strstr funksiyasini ham ta'minlaydi, u strstr bilan bir xil ishlaydi, bundan tashqari u katta-kichik harflarga sezgir bo'lmagan qidiruvni amalga oshiradi.

strhrchr strrchr funksiyasi biz ikkinchi argumentda ko'rsatgan belgi uchun o'ngdan birinchi qator argumentini qidiradi. Funktsiya ushbu belgining topilgan nusxasi joylashgan joydan satrning oxirigacha bo'lgan satr qismini qaytaradi:

// $str ichida "s" ni o'ngdan qidiring

$newsstr = strstr ($str , "s" );

var_dump ($newstr); // string(6) "stack."

E'tibor bering, strstr dan farqli o'laroq, agar ikkinchi argument bir nechta belgilardan iborat bo'lsa, faqat birinchisi ishlatiladi:

// ko'p belgili ikkinchi argument bilan test $newstr = strrchr ($str , "the" ); ([ var_dump ($newstr); // string(5) "tack." "The pichan" ni qaytarish o'rniga, strrchr funktsiyasi "tack" ni qaytaradi va qidiruvga faqat ikkinchi argumentning birinchi harfini qo'llaydi. [, (PHP 4, PHP 5, PHP 7) [, ob_start - = Chiqish buferlashni yoqish ]]])

Bu funksiya chiqishni buferlash imkonini beradi. Agar chiqish buferlash faol bo'lsa, skript chiqishi yuborilmaydi (sarlavhalardan tashqari), lekin ichki buferda saqlanadi.

Ushbu ichki buferning mazmuni yordamida satr o'zgaruvchisiga ko'chirilishi mumkin ob_get_contents() . Ichki bufer tarkibini chiqarish uchun siz foydalanishingiz kerak ob_end_flush() . Shu bilan bir qatorda siz foydalanishingiz mumkin ob_end_clean()

bufer tarkibini yo'q qilish uchun.

Diqqat Ba'zi veb-serverlar (masalan, Apache) qayta qo'ng'iroq qilish funktsiyasi chaqirilganda skriptning ishchi katalogini o'zgartiradi. Uni ishlatish orqali qaytarib olishingiz mumkin chdir(dirname($_SERVER["SCRIPT_FILENAME"]))

qayta qo'ng'iroq qilish funktsiyasida. Chiqish buferlari stekga suriladi, ya'ni qo'ng'iroqlarga ruxsat beriladi ob_start() Chiqish buferlari stekga suriladi, ya'ni qo'ng'iroqlarga ruxsat beriladi boshqa faolga qo'ng'iroq qilgandan keyin ob_end_flush() . Bunday holda, qo'ng'iroq qilish kerak

tegishli marta soni.

Agar bir nechta qayta qo'ng'iroq qilish funksiyalari faol bo'lsa, chiqish ularning har biri uchun joylashtirish tartibida ketma-ket filtrlanadi. Parametrlar ro'yxati , Ixtiyoriy output_callback parametrini belgilash mumkin. Bu funksiya argument sifatida satrni oladi va qatorni ham qaytarishi kerak. Qayta tiklash (yuborish) yoki tozalash (foydalanish ob_flush() ob_clean() yoki

o'xshash funktsiyalar ) yoki so'rov oxirida chiqish buferi brauzerga o'chirilgan bo'lsa. (output_callback funksiyasi chaqirilganda, u bufer tarkibini oladi va chiqish buferi brauzerga yuborilishi uchun yangilangan tarkibni qaytarishi kerak. [, Agar output_callback to'g'ri bo'lmasa, hujjatlashtirilgan funksiya qaytadi ])

YOLG'ON . Ushbu parametr uchun funksiya tavsifi: String ishlov beruvchi.

string $bufer ob_clean() int $faza

Bufer "The pichan" ni qaytarish o'rniga, strrchr funktsiyasi "tack" ni qaytaradi va qidiruvga faqat ikkinchi argumentning birinchi harfini qo'llaydi..

Shu bilan bir qatorda siz foydalanishingiz mumkin , ob_end_flush() , Ixtiyoriy output_callback parametrini belgilash mumkin. , Parametrlar ro'yxati Chiqish buferining tarkibi. Chiqish buferlari stekga suriladi, ya'ni qo'ng'iroqlarga ruxsat beriladi bosqichi Konstantalarning bit niqobi PHP_OUTPUT_HANDLER_* Agar output_callback qaytsa, keyin asl ma'lumot brauzerga o'zgarishsiz yuboriladi.

Qiymatni o'tkazish orqali output_callback parametrini e'tiborsiz qoldirish mumkin:

Va qayta qo'ng'iroq qilish funktsiyalaridan chaqirib bo'lmaydi, chunki ularning xatti-harakatlarini oldindan aytib bo'lmaydi. Agar siz bufer tarkibini o'chirmoqchi bo'lsangiz, qayta qo'ng'iroq qilish funktsiyasidan "" (bo'sh qator) ni qaytaring. qayta qo'ng'iroq qilish funktsiyalaridan chaqirib bo'lmaydi, chunki ularning xatti-harakatlarini oldindan aytib bo'lmaydi. Bundan tashqari, funksiyalarni chaqira olmaysiz

print_r($ifoda, rost)

Agar ixtiyoriy chunk_size parametri o'tkazilsa, bufer hajmi bo'yicha chunk_size dan katta yoki unga teng bo'lgan har qanday chiqishdan keyin tozalanadi. Standart qiymat 0 bufer yopilganda chiqish funksiyasi chaqirilishini bildiradi.

PHP 5.4.0 dan oldin, qiymat 1 parametrni o'rnatadigan maxsus qiymat edi chunk_size 4096 da.

Bayroqlar parametri chiqish buferida bajarilishi mumkin bo'lgan operatsiyalarni boshqaruvchi bit niqobidir. Chiqish buferlashni yoqish Odatiy bo'lib, u chiqish buferini tozalash, tozalash va o'chirish imkonini beradi, bu esa |

|

, yoki bu kombinatsiyaning qisqartmasi sifatida.
Har bir bayroq quyida tavsiflanganidek, bir qator funksiyalarga kirishni nazorat qiladi: Ixtiyoriy output_callback parametrini belgilash mumkin. , Shu bilan bir qatorda siz foydalanishingiz mumkin Doimiy Funksiyalar .
PHP_OUTPUT_HANDLER_CLEANABLE ob_end_flush() , Parametrlar ro'yxati Doimiy , Va .
ob_get_clean() Shu bilan bir qatorda siz foydalanishingiz mumkin , ob_end_flush() Doimiy , Va .

PHP_OUTPUT_HANDLER_FLUSHABLE

ob_get_flush() PHP_OUTPUT_HANDLER_REMOVABLE Qaytish qiymatlari ob_clean() Qaytadi

TO'G'RI

muvaffaqiyatli tugatilgandan so'ng yoki xatolik yuzaga kelsa.
7.0.0 O'zgarishlar ro'yxati Chiqish buferlari stekga suriladi, ya'ni qo'ng'iroqlarga ruxsat beriladi Versiya Tavsif Bo'lgan holatda chiqish buferi qayta qo'ng'iroq funksiyasi ichida foydalanilganda, bu funksiya endi xato yaratmaydi E_ERROR
5.4.0 , lekin o'rniga qo'ng'iroq qiladi Chiqish buferlari stekga suriladi, ya'ni qo'ng'iroqlarga ruxsat beriladi E_RECOVERABLE_ERROR , uchinchi tomon xato ishlov beruvchilariga uni qo'lga olish imkonini beradi. Uchinchi parametr ob_clean() mantiqiy dan o'zgartirildi ( mantiqiy ) o'chirish parametrining (qaysi, o'rnatilganda skript tugallanmaguncha buferni o'chirishni oldini oldi) butun songa ( butun son
5.4.0 ) bayroqlar parametri. chunk_size Afsuski, bu PHP 5.4.0 dan oldingi uchinchi parametrdan foydalangan kod uchun API mos kelmasligini anglatadi. Qarang 1 bayroqlar bilan misol
4.3.2 , kod bilan qanday ishlashni tushunish uchun u ikkala versiya bilan ham mosligini saqlab qoladi. ob_clean() Parametr

, ichiga oʻrnatilgan

, endi chiqish buferiga 1 bayt chiqishiga olib keladi.

Funktsiya qaytadi
{
agar output_callback bajarilmasa.
Misollar
}

1-misol Foydalanuvchi tomonidan belgilangan qayta qo'ng'iroq qilish funksiyasiga misol

?>


Funktsiyani qayta chaqirish ($bufer)




// barcha olmalarni apelsin bilan almashtiring

© 2024 ermake.ru -- Kompyuterni ta'mirlash haqida - Axborot portali