Лекція 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-3, що в загальному випадку веде до значного прискорення роботи.
Важливою особливістю є те, що розробнику немає необхідності піклуватися про розподіл і звільнення пам'яті. Ядро PHP реалізує засоби для автоматичного керування пам'яттю; вся виділена пам'ять повертається системі після завершення роботи скрипта.
Інтерпретатор складається з ядра і модулів, «розширень», що представляють собою динамічні бібліотеки. Розширення дозволяють доповнити базові можливості мови, надаючи можливості для роботи з базами даних, сокетами, динамічною графікою, криптографічними бібліотеками, документами формату PDF і тому подібним. Будь-який бажаючий може розробити своє власне розширення і підключити його. Існує величезна кількість розширень, як стандартних, так і створених сторонніми компаніями та ентузіастами, однак в стандартну поставку входить лише кілька десятків, що добре себе зарекомендували. Велика кількість розширень є в репозиторії PECL.
Інтерпретатор PHP має спеціальний конфігураційний файл – php.ini, що містить велику кількість налаштувань, зміна яких впливає на поведінку інтерпретатора. Є можливість відключити використання ряду функцій, змінити обмеження на використовувану скриптом оперативну пам'ять, час виконання, обсяг завантаження, налаштувати журнал помилок, роботу з сесіями і поштовими сервісами, підключити додаткові розширення, а також багато іншого. Можливо дроблення великого конфігураційного файлу на частини. Наприклад, широко поширена практика винесення налаштувань розширень в окремі файли. Параметри інтерпретатора можуть бути перевизначені в файлах конфігурації HTTP-сервера (наприклад, .htaccess в Apache) або в самому скрипті під час виконання за допомогою команди ini_set.
SAPI – це зовнішній рівень абстракції, призначений для вбудовування інтерпретатора в інші додатки і відповідає за його роботу (запуск, зупинка, передача скриптів на виконання, доступ до зовнішніх даних). Існує кілька основних SAPI, що визначають способи запуску і використання PHP:
- В якості модуля до веб-сервера (наприклад, для Apache модуль mod_php). В цьому випадку інтерпретатор PHP виконується в оточенні процесу веб-сервера. Веб-сервер керує кількістю запущених процесів PHP і повідомляє їм, які скрипти потрібно виконати.
- CGI SAPI. Використання CGI має на увазі запуск нового процесу для обробки кожного запиту. Для виконання PHP-скрипта веб-сервер запускає ./php-cgi /path/to/script.php. Сам принцип такого використання передбачає, що інтерпретатор PHP виконує тільки один скрипт, після чого закінчує свою роботу.
- FPM SAPI, відомий як php-fpm – це інша реалізація протоколу FastCGI. Дана реалізація вирішувала ряд проблем, які перешкоджали використанню CGI/FastCGI SAPI. Зокрема, з'явилася можливість перезапуску пулу інтерпретаторів PHP без втрати запитів, запуск декількох пулів під різними користувачами, аварійний перезапуск інтерпретаторів в разі проблем з ними і ще кілька приємних доповнень. Надалі був доданий режим динамічного керування числом запущених процесів PHP, і починаючи з версії PHP 5.3.3 php-fpm був включений в PHP як окремий SAPI.
- В якості скрипта командного рядка (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.