Лекція 25. Основи PHP

PHP – скриптова мова програмування, яка була створена для генерації HTML-сторінок на стороні веб-сервера та активно використовується для розробки веб-додатків. PHP є однією з найпоширеніших мов, що використовуються у сфері веб-розробки (разом із Java, .NET, Perl, Python, Ruby). PHP підтримується переважною більшістю хостинг-провайдерів.

PHP інтерпретується веб-сервером в HTML-код, який передається на сторону клієнта (браузер). На відміну від мови JavaScript, користувач не бачить PHP-коду, тому що браузер отримує готовий html-код. Це є перевагою з точки зору безпеки, але погіршує інтерактивність сторінок.

3 грудня 2015 року було оголошено про вихід PHP версії 7.0.0.

Нова версія грунтується на експериментальній версії PHP, яка спочатку називалася phpng (PHP Next Generation – наступне покоління), і розроблялася з упором на збільшення продуктивності і зменшення споживання пам'яті. В новій версії додана можливість вказувати тип даних, що повертаються з функції, доданий контроль переданих типів для даних, а також нові оператори.

Особливості PHP

PHP – мова, у код якої можна вбудовувати безпосередньо html-код сторінок, які, у свою чергу, коректно оброблюватимуться PHP-інтерпретатором. Обробник PHP просто починає виконувати код після відкриваючого тегу (<?php) і продовжує виконання до того моменту, поки не зустріне закриваючий тег.

Велика різноманітність функцій PHP дає можливість уникати написання багаторядкових функцій, призначених для користувача, як це відбувається в C.

В PHP наявні інтерфейси для роботи з великою багатьма базами даних:

  • вбудовані бібліотеки для роботи з MySQL, PostgreSQL, SQLite, mSQL, Oracle, dbm, Hyperware, Informix, InterBase, Sybase.
  • завдяки стандарту відкритого інтерфейсу зв'язку з базами даних (ODBC) можна підключатися до всіх баз даних, до яких існує драйвер.

Багато конструкцій мови запозичені з С, Perl. Код РНР дуже схожий на той, який зустрічається в типових програмах мовами С. Це помітно знижує початкові зусилля при вивченні PHP.

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

Популярність в області розробки веб-сайтів визначається наявністю великого набору вбудованих засобів і додаткових модулів для розробки веб-додатків.

Додаткові можливості

Мова явно підтримує HTTP cookies відповідно до специфікацій Netscape. Це дозволяє проводити встановлення та читання невеликих сегментів даних на стороні клієнта. PHP надає можливість організації роботи з користувачем протягом сеансів (сесій). В сесії можна зберігати різні дані, включаючи об'єкти.

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

Основне використання розширень – надбудови бібліотек інтерфейсів користувача (UI-бібліотек).

Розширення умовно діляться на три групи:

  • Розширення PHP: WxPHP (Windows, Linux, macOS).
  • Обгортки, що використовують системні функції засобами FFI: Win32Std, Tk.
  • Консольні обгортки для використання командного інтерфейсу (CLI): PHP-UI.

Розроблено розширення, такі, як двостороння обгортка для використання інших мов при написанні розширень PHP, і навпаки. Наприклад, PSV Component Library, – проект, що складається з трьох підпроектів:

  • PHP4Delphi реалізує з'єднання PHP з програмами, написаними на Delphi засобами WinAPI. Розроблявся з 1999 року, але не оновлювався c 2009 року, через що з'явилися відгалуження – форки – сторонні оновлення, наприклад, PHP4Lazarus.
  • PHP extensions development framework – засіб створення розширень PHP, VCL-компоненти – невід'ємна частина PHP4Delphi, базові компоненти якої потрібні для створення додатків.
  • php4Applications – розширення для використання PHP в інших мовах, що базується на PHP4Delphi, що дає доступ до макросів і спрощує використання PHP, позбавляючи від створення обгортки.

Існують також більш повноцінні середовища розробки для GUI PHP:

  • DevPHP

Першою в цій категорії стала студія DevPHP-IDE, яка використовувала Kylix (Delphi) в якості основи інтерфейсу і php-cli для створення призначених для користувача програм.

Вона включала в себе редактор коду, кілька інструментів і візуальний перегляд HTML-сторінок.

Вперше була представлена в 2002 році, зараз має 3 стабільні версії, але розробка зупинена.

  • CodeGear Rad Studio (Розширення)

Після DevPHP IDE з'явилося розширення – набір компонентів для CodeGear Rad Studio 2009 року на базі php4delphi з деякими поліпшеннями (веб-елементи, інспектор, відналагоджувач), підтримка її тривала протягом чотирьох версій, друга з яких увійшла в платне розширення Rad Studio 2010: була можливість використовувати скрипти, задавати стиль веб-компонентів, переглядати стилі і веб-сторінки до збірки програми, запускати локальний сервер, збирати програму, як окремий додаток і налагоджувати код. З виходом Delphi XE розширення отримало назву RADPHP Xe. Далі сама студія стала називатися Embarcadero Delphi, і робота над даним розширенням була припинена на невизначений термін.

  • DevelStudio (RAD)

У 2009 році на базі php4delphi почалася розробка середовища для створення графічних PHP-додатків. Середовище отримало назву PHP DevelStudio. Перша версія DevelStudio мала невелику кількість компонентів в наборі інструментів і працювала на застарілому PHP 4. У другій версії DevelStudio отримала підтримку PHP 5. Були додані потоки, зроблені численні зміни і поліпшення. Код збірки програм став закритим, попередні версії програми і повідомлення на форумі були видалені з метою перешкоджання зловмисникам.

У 2012 році вийшла остання версія середовища - 3.0.2, де з'явився новий набір компонентів, в тому числі браузер Chromium замість IE, що привернуло увагу веб-розробників.

У 2014 році почалися перші спроби з відновлення середовища, на цей раз з боку спільноти. В кінці 2018 року вихідний код був відновлений і доступний на GitHub.

У 2019 спільнота звернулося до творця DevelStudio з метою зміни політики поширення середовища, внаслідок чого вона стала доступною для оновлення та редагування. Через скарги на відсутність посилань на використані бібліотеки (DCEF, PHP4Delphi, TSizeCtrl, SynEdit) форум був видалений, а одна зі сторінок з описом середовища була перенаправлено на головну сторінку сайту. З цього моменту DevelStudio офіційно належить спільноті.

  • DevelNext (DN)

Паралельно з цим головний розробник DevelStudio почав створювати «реінкарнацію» попереднього середовища. Він взяв за основу графічну бібліотеку JavaFX, в результаті вийшло повністю нове середовище, з підтримкою CSS, але без повної підтримки PHP – проект був заснований на власній мові jPHP. Його особливістю є JIT-компілятор і робота на JVM.

У 16-й версії середовище DevelNext отримало підтримку php 7 і було розширене ентузіастами для розробки під платформу OS Android.

  • PHPQt

У 2015 році Олександр Казанцев почав вивчати алгоритми розробки інтерфейсів і створив розширення php_qml, що давало можливість використовувати віджети з бібліотеки QT, але мало підтримку лише однієї платформи – Windows.

З цього почалася розробка PHPQt, перші версії не звернули особливої ​​уваги з боку веб-розробників, тому автор почав поглиблено покращувати розширення.

28 липня 2015 року було опубліковано перший варіант компілятора проектів, на той момент це був простий виконувач скриптів (сценаріїв) і мав залежність від Windows API.

З появою шостої версії проект став доповненням для середовища Qt Studio, а компілятор став всього-на-всього оптимізатором коду перед кінцевою збіркою програми. З'явився повноцінний редактор інтерфейсу, підказки в редакторі коду і почала створюватися документація.

Особливості інтерпретатора

PHP-скрипти зазвичай обробляються інтерпретатором в порядку, що забезпечує кросплатформовість розробленого додатку:

  1. лексичний аналіз вихідного коду і генерація лексем,
  2. синтаксичний аналіз отриманих лексем,
  3. генерація байт-коду,
  4. виконання байт-коду інтерпретатором (без створення виконуваного файлу).

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

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

Інтерпретатор складається з ядра і модулів, «розширень», що представляють собою динамічні бібліотеки. Розширення дозволяють доповнити базові можливості мови, надаючи можливості для роботи з базами даних, сокетами, динамічною графікою, криптографічними бібліотеками, документами формату PDF і тому подібним. Будь-який бажаючий може розробити своє власне розширення і підключити його. Існує величезна кількість розширень, як стандартних, так і створених сторонніми компаніями та ентузіастами, однак в стандартну поставку входить лише кілька десятків, що добре себе зарекомендували. Велика кількість розширень є в репозиторії PECL.

Інтерпретатор PHP має спеціальний конфігураційний файл – php.ini, що містить велику кількість налаштувань, зміна яких впливає на поведінку інтерпретатора. Є можливість відключити використання ряду функцій, змінити обмеження на використовувану скриптом оперативну пам'ять, час виконання, обсяг завантаження, налаштувати журнал помилок, роботу з сесіями і поштовими сервісами, підключити додаткові розширення, а також багато іншого. Можливо дроблення великого конфігураційного файлу на частини. Наприклад, широко поширена практика винесення налаштувань розширень в окремі файли. Параметри інтерпретатора можуть бути перевизначені в файлах конфігурації HTTP-сервера (наприклад, .htaccess в Apache) або в самому скрипті під час виконання за допомогою команди ini_set.

SAPI – це зовнішній рівень абстракції, призначений для вбудовування інтерпретатора в інші додатки і відповідає за його роботу (запуск, зупинка, передача скриптів на виконання, доступ до зовнішніх даних). Існує кілька основних SAPI, що визначають способи запуску і використання PHP:

  1. В якості модуля до веб-сервера (наприклад, для Apache модуль mod_php). В цьому випадку інтерпретатор PHP виконується в оточенні процесу веб-сервера. Веб-сервер керує кількістю запущених процесів PHP і повідомляє їм, які скрипти потрібно виконати.
  2. CGI SAPI. Використання CGI має на увазі запуск нового процесу для обробки кожного запиту. Для виконання PHP-скрипта веб-сервер запускає ./php-cgi /path/to/script.php. Сам принцип такого використання передбачає, що інтерпретатор PHP виконує тільки один скрипт, після чого закінчує свою роботу.
  3. FPM SAPI, відомий як php-fpm – це інша реалізація протоколу FastCGI. Дана реалізація вирішувала ряд проблем, які перешкоджали використанню CGI/FastCGI SAPI. Зокрема, з'явилася можливість перезапуску пулу інтерпретаторів PHP без втрати запитів, запуск декількох пулів під різними користувачами, аварійний перезапуск інтерпретаторів в разі проблем з ними і ще кілька приємних доповнень. Надалі був доданий режим динамічного керування числом запущених процесів PHP, і починаючи з версії PHP 5.3.3 php-fpm був включений в PHP як окремий SAPI.
  4. В якості скрипта командного рядка (CLI SAPI), що є виконуваним файлом, який викликається користувачем з командного рядка; скрипт виконується в оточенні виклику користувача. У цьому випадку можливе використання PHP для створення клієнтських GUI-додатків і вирішення адміністративних завдань в операційних системах UNIX, Linux, Microsoft Windows, Mac OS X і AmigaOS. Однак в цій ролі він не набув поширення, віддаючи перевагу Perl, Python і VBScript.

Починаючи з версії PHP 5.4.0 в CLI SAPI з'явилася можливість запуску PHP як окремого HTTP-сервера. Однак цей режим призначений виключно для розробки, так як запускає тільки один процес інтерпретатора і виконує всі запити виключно послідовно.

Додатки PHP

З використанням PHP розроблено велику кількість додатків, які широко використовуються на різних сайтах, форумах і блогах:

  • Системи керування вмістом (CMS) – Drupal, Typo3, Joomla, Wordpress;
  • Системи для Інтернет-комерції – Magento, osCommerce, OpenCart;
  • Галереї зображень – Coppermine, Gallery Project, 4images;
  • Вікі-рушії – MediaWiki, DokuWiki;
  • Форумні рушії – phpBB, SMF, vBulletin, Invision Power Board;
  • Утиліти адміністрування СУБД – phpMyAdmin, phpPgAdmin, Adminer;
  • eyeOS – віддалена операційна система, заснована на принципі Desktop Operating System.


Остання зміна: Thursday 28 May 2020 20:20 PM