Чоловік завжди memberlist php g. Використання ob_start за підтримки проектів на php


Привіт, Хабр!

Сьогодні я б хотів познайомити початківців вебмайстрів з різноманітними витонченими способами використання буферизації виведення в php. Досвідчені вебмастера для себе тут врят знайдуть щось корисне. Хоча - хто знає?

Як ви всі знаєте, буферизацией виведення в php управляє набір функцій, що починаються на «ob_». Найголовніша з них - ob_start. При запуску вона збирає наступний висновок, тобто всілякі print (), echo та інше, що потім віддасться відвідувачеві у формі html-сторінки. І якщо перед тим, як виводити, ми запустили буферизацию, то з цим майже готовим вже, сторінкою, можна буде наостанок щось створити.


  Наприклад, ми хочемо відфільтрувати всі посилання на сторонні сайти.

На нашому, древньому як сокира австралопітека, форумі, роїться безліч спамерів, заманюють відвідувача в місця, заповнені розпустою, однорукими бандитами і політичною агітацією. Можна було б використовувати js зі стеженням, але ми хочемо замість цього змінити всі ці посилання так:

   "Http://blackjack-hookers.com" \u003d\u003e "http://myoldforum.ru/redirect.php?url\u003dblackjack-hookers.com"

Спосіб може бути і не найефективніший, але дієвий. Ми написали redirect.php з фільтром і чорним листом, і тепер нам треба перетворювати все посилання на тисячах сторінок форуму. За допомогою ob_start і парочки регулярних виразів ми зробимо це за все в кілька рядків:

Function f_callback ($ buffer) ($ buffer \u003d preg_replace ( "#http: // (www.)? Myoldforum \\ .ru / #", "/", $ buffer); $ buffer \u003d preg_replace ( "# href \u003d" http : // ([^ "] *)" # "," # href \u003d "/redirect\\.php\\?url\u003d$1", $ buffer); return $ buffer;) ob_start (f_callback);

Тепер, підключивши цей код на початку index.php, або іншого файлу, до якого звертається сервер при перегляді сторінок, ми отримаємо те, що нам потрібно.

Змінюючи контент таким чином, ми не обмежені рамками методів движка. Це буває дуже цінно. Можна, наприклад, додати плагін:

Function generate_plugin () (/ * щось генеруємо * /) function f_callback ($ buffer) (/*...*/ $ buffer \u003d str_replace ( "", Generate_plugin (), $ buffer); /*...*/ return $ buffer;) ob_start (" f_callback ");

Тепер, там, де ми додали в контент з'явиться те, що ми хотіли отримати. Одне із застосувань - вставка віджета js на сторінку сайту. Наприклад, яндекс-карти. Зазвичай це не складає ніяких труднощів, але іноді криво написаний редактор сторінок сайту екранує лапки і фігурні дужки, ламаючи віджет. Як бачимо, ця проблема легко вирішується.

Набір інструментів php для роботи з буферу виведення багатий, і не обмежується одним лише ob_start. Вищеописані прийоми в деяких випадках надмірно ресурсомісткі і громіздкі, оскільки оперують з усією сторінкою. Ми можемо обробити тільки її частину, створивши в шаблоні оболонку навколо генерації чогось, в нетрі чого нам не хочеться лізти, але що обов'язково потрібно поправити:

  (GENERATE BIG CRAZY THING)

Повинно бути, ви вже помітили всі ці обороти: «не хочеться лізти», «древній, як стілець тиранозавра», «криво написаний редактор» ... В ідеальному світі оболонки навколо буфера виводу не потрібні. Все що можна зробити за допомогою ob_start, теоретично можна було б зробити і без нього. Цей прийом іноді вносить путанніцу в код проекту, багато хто бачить його сенс лише в тому, що б віддати висновок в ob_gzhandler для стиснення, і вважають його застосування в інших випадках небезпечним. Але часто без управління виводу просто не обійтися.

Особливо якщо не хочеться копати углиб.

Як я зрозумів, сайт буде створюватися без використання фреймворка? А то мені знайомі розробники все вуха прожужжали що потрібно вивчати фреймворк Yii.

2) Я ось і хотів запитати .. Приклад створення інтернет магазину, який розглядається в курсі, він швидше за академічний? Реальні комерційні проекти, напевно, створюються з використанням фреймворків, тому що це сильно оптимізує процес розробки завдяки використанню типових шаблонів коду. Відповідь на це питання допоміг би внести ясність в те, що відбувається ... PHP Start | Практика все таки варто пройти з метою розуміння загальної логіки?

відповідь:

1) Знайомі справу правильно, я теж так вважаю. Але будь-який фреймворк вимагає підготовки, наприклад, знань. Коли я будував систему MVC в практиці, то намагався слідувати підходам, які використовуються у фреймворку. Тому PHP Start (теорія і практика) допоможе з підготовкою, після нього можна сміливо починати вчити yii2 (або що-небудь схоже).

Адреса сховища проекту:

  Питання # 1:

Не можу позбутися від помилки:

Notice: Use of undefined constant _FILE_ - assumed "_FILE_" in /Users/Elios/Sites/Test/index.php on line 10

Підкажіть, що це може бути?

відповідь:

Перед і після FILE  потрібно писати по 2 знака _

__FILE__ належить до "чарівним" констант PHP. Тут докладніше.

View All Members

Provided that you have the appropriate permissions, you will be able to see the Members  entry on the or in the. Clicking one of these links will bring you to the View all Members  page, the default page for the Members List  section. There is also a   page in this section, where you can search for members registered on the forum.

On the View All Members  page, you will see the list of all the members registered on the forum. Pages are used so that there are not too many members listed on one single page. When there is more than one page, the additional pages can be selected from here. On the right side of the "Members List" title bar, every letter of the English alphabet is displayed. These letters are used to jump to the usernames of registered members that begin with that letter, so that you do not have to scroll through several pages to find them. This does not filter out all of the usernames beginning with different letters, but rather serves as an anchor, so you will be directed to usernames that start with the selected letter.

All usernames in the memberlist can be ordered by: Status (Online / Offline), Username, Email, Website, ICQ, AIM, YIM, MSN, Position, Date Registered, and Posts. These column headings are links that can be used to sort the list in ascending or descending order, or to reverse the sort order of the column under the heading that is currently used to sort the list.

Search for Members

This section allows you to do either a simple search for members, or to choose to filter your results by using additional parameters. You can search for members based on their username, email address, messenger nickname, website, or position.

The search results will show matches for the terms that you enter in the search field. If any of the additional search parameters are selected, then the results will also be filtered accordingly. The search does not look only for full-word exact matches, but also for any parts of text that match the search terms. For this reason, if the search term represents only part of the word that you are looking for, then the results may show many more matches than expected.

Some of the additional search parameters relate to information that users can either choose not to include in their profile (messenger nickname, website) or they can choose not to reveal it to the public (email), so using these parameters might not always bring up the results that you are looking for. The results of the search will be more accurate the more letters / words that are used in the search.