ООП, патерни, PHP, програмування - Бложик А

Такі справи. Всі ці mysqladmin -u root password, SET PASSWORD FOR root@localhost=PASSWORD, UPDATE user SET Password=PASSWORD(… не допоможуть. Стверджують, це підвищує безпеку.

Але це, м'яко скажемо, не дуже зручно для організації та управління базами даних, а також створення нових користувачів цих баз даних, коли є, наприклад, phpMyAdmin, що надає комфортний веб-інтерфейс для рутинних дій. Тому заходимо в mysql-client з-під unix root користувача:

Безпечне зберігання облікових даних у PHP

Хоч і безліч проблем, пов'язаних із захистом секретних даних, може бути усунуто за допомогою більш-менш «секретної обробки», проте здається, що все ще має місце потреба в збереженні секретних даних прямо в коді. Використання такого роду патерну, очевидно, не рекомендується. У базі даних Common Weakness Enumeration є навіть запис про це: CWE-798. Жорстко закодовані облікові дані можуть становити величезний ризик, якщо зловмисник якимось чином зміг отримати доступ до коду та прочитати їх.

Так що щодо PHP?

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

Ми пройдемося за декількома добрими методами зберігання облікових даних, обговоримо, що в них хорошого і поганого. Всі вони будуть використовувати прості методи зберігання, засновані на коді або у відповідному простому файлі (наприклад, .env). Ми почнемо з найгіршого варіанту - збереження облікових даних утекстовому вигляді у коді.

Рішення: Qt Creator «Відсутні відповідні комплекти»

Якщо при спробі зібрати проект, ви виявляєте, що немає деяких комплектів для збирання, то схоже, що ви встановили qtcreator без SDK. Тому потрібно зробити таке:

І перезапустити Qt Creator.

Якщо після цього при компіляції виникне помилка "qt creator needs a compiler setup to build", виберіть у параметрах компілятор:

даних

Профайлінг PHP додатків

допомогою

Аналіз часу викликів методів і функцій дозволяє знайти «пляшечку шийку» у проекті для подальшої оптимізації.

Потім активуємо профайлінг у php.ini (шлях до файлу залежить від конфігурації веб-сервера):

Додавши до кінця:

Перезапустимо PHP сервер:

Тепер після кожного відкриття PHP додатків, в /tmp (за замовчуванням) будуть створюватися файли з ім'ям cachegrind.out.ХОСТ.REQUEST_URI.ЧАСНА_МІТКА.

Ці файли можна відкрити за допомогою KCacheGrind.

Як автоматично створювати гетери та сетери

Різну рутину слід автоматизувати. У створенні геттерів і сеттерів немає інтелектуальної діяльності, з цим впорається найпростіший алгоритм. У PhpStorm для таких цілей існують генератори, серед яких є і генератор гетерів та сеттерів:

патерни

патерни

патерни

даних

даних

ПРАВИЛЬНЕ рішення: But these conflict with your requirements or minimum-stability

Якщо ви загуглите виправлення помилки Composer «Якщо ви conflict with your requirements or minimum-stability», то, найімовірніше, натрапите на пораду додати в composer.json параметр:

Однак, це лише половина рішення, але що призводить до того, що пакети, що мають кілька версій (dev, beta, stable),будуть ставитися у версії dev (розроблюваної) з відповідними небажаними та несподіваними наслідками та нестабільністю.

Щоб уникнути цього, потрібно додати ще один параметр —prefer-stable. Він говорить Composer віддавати перевагу стабільним версіям пакетів і тільки у випадку, якщо таких немає, встановлювати версії, що задовольняють задану мінімальну стабільність (в даному випадку dev).

Таким чином, щоб виправити помилку Composer «Бути ці conflict with your requirements or minimum-stability», необхідно до composer.json додати параметрprefer-stable у парі зminimum-stability :

Відключаємо запуск зовнішніх програм через PHP

У PHP є низка функцій, з допомогою яких можна запускати зовнішні програми, зокрема. через Шел.

Це дуже корисна можливість при створенні сервісів та інших додатків складніше за сайтики.

Але на серверах, на яких працюють лише типові сайти (наприклад, на CMF або CMS), ці функції можуть бути використані скрипт-кідді та іншими хакерами, що експлуатують уразливості тих же CMS. І навіть обмежуючи поле діяльності сайту в рамках його каталогу хоста, за допомогою запуску зовнішніх програм руйнівні дії можуть вирватися за межі цієї пісочниці.

Коли побачив свій код 4-річної давності

даних

Спостереження

Про День програміста знають лише програмісти.

Оновив PhpStorm

Оновив PhpStorm. Новий інтерфейс приголомшливо мінімальний!

допомогою

Ніколи не використовуйте NULL

Коли ми разом з клієнтами проводимо код-рев'ю, регулярно спостерігаємо одну й ту саму картину, яку я вважаю проблематичною у багатьох відношеннях – використання null як допустимої якості або значення, що повертається. Можна ж зробитикраще.

Давайте спершу подивимося загальні сценарії використання, а потім обговоримо, як можна покращити код, щоб зробити його більш стійким до помилок та простим у використанні. Більшість зазначених проблем стають особливо помітними, коли ваші вихідні джерела використовує хтось ще.

Для чого це використовується

Прикладом частого сценарію використання можливо використання додаткових залежностей через метод класу:

У більшості випадків logger буде встановлений, але хтось забуде про це під час використання вашого сервісу. На сцену виходить другий розробник і пише новий метод у цьому класі, використовуючи властивість $logger. Під час розробки властивість завжди встановлюється та тестується за відповідними сценаріями використання, тому розробники забувають перевіряти на null – очевидно, це стане проблемою за інших обставин. Ви сподіваєтеся, що методи будуть викликані в певному порядку, який складно документувати. Метод getLogger(), що створює нульовий логер за умовчанням, міг би вирішити цю проблему, але не гарантовано, оскільки другий розробник може не знати про цей метод і просто використовувати властивість.

Супершвидкісний Symfony за допомогою nginx

Коротко: помістіть зворотний проксі-сервер перед вашою програмою (для HTTP-кешування або з метою балансування навантаження), щоб збільшити його продуктивність.

Фреймворки, такі як Symfony, потенційно дозволяють створювати супершвидкісні програми. Ми вже бачили один спосіб як досягти цього (шляхом перетворення програми на HTTP сервер), інший спосіб полягає в установці зворотного проксі перед ним.

У цій статті ми візьмемо Symfony додаток і побачимо, як збільшити його продуктивність в 140 разів за допомогою nginx.

Чому PHP-розробники думають, що MVC – це архітектура програми?

Раніше я вказував на те, що Model-View-Controller являє собою патерн інтерфейсу користувача, а не архітектуру програми. Але звідки у PHP-розробників виникла ідея, що MVC – це насамперед архітектура? (Це можна сказати про всіх розробників серверної частини, не тільки про PHP)

Я думав, що MVC — це архітектура. Навіть після прочитання «Каталогу шаблонів корпоративних додатків» Фаулера і, незважаючи на те, що MVC призначався для інтерфейсу користувача, я вважав, що все правильно зрозумів і роблю «додаток інтерфейсу користувача». Але це було зовсім так; правильніше було б сказати, що я змішував проблеми інтерфейсу користувача з основою ядра програми.

Асинхронні контролери в Symfony

Як і багато інших речей, асинхронне програмування не є чимось новим. Ви можете використовувати цей стиль програмування в багатьох середовищах, починаючи з Python до .NET.

У браузері окремі події, такі як клік миші, розміщуються в циклі обробки подій (див. What the heck is the event loop anyway?, Філіп Робертс), а потім події обробляються асинхронно без певної черги: не можна точно дізнатися, коли подія кліка миші виконається .

Ключове місце у асинхронності займає I/O. У браузерах це поняття включено, починаючи з Internet Explorer 5.0, і популяризовано Gmail у 2004 році. Придуманий метод AJAX дозволив браузерам виконувати запити до сервера після початкового завантаження сторінки.

На сервері неблокуючий асинхронний I/O дозволяє, наприклад, продовжувати виконувати інші завдання, замість очікувати виконання довгих запитів до бази даних. існує багатомеханізмів обробки потоків асинхронного коду, такі як ф'ючерси/promises, генератори і спостерігачі.

Так що асинхронне програмування не розганяє ваш комп'ютер, щоб отримати більш високу продуктивність. Воно може лише допомогти комп'ютеру використовувати ефективніше ресурси шляхом усунення втрат часу очікування.