Что такое PHP Devel и зачем он нужен?
Представь, что ты — разработчик, который хочет скомпилировать собственное PHP-расширение или отладить работу PHP на системном уровне. Вот здесь и появляется php-devel (или php-dev в некоторых дистрибутивах) — пакет, содержащий заголовочные файлы, библиотеки и инструменты для разработки расширений PHP.
php-dev, а не php-devel как в RHEL/CentOS. Это частая ошибка новичков.
Подготовка системы Ubuntu
Давай разберем процесс установки php-dev на Ubuntu шаг за шагом. Начнем с обновления системы:
sudo apt update
sudo apt upgrade -y
Проверка установленного PHP
Сначала убедимся, какая версия PHP у тебя установлена:
php --version
Установка PHP Devel (php-dev) на Ubuntu
Способ 1: Установка для конкретной версии PHP
Если у тебя уже установлен PHP, найди нужный пакет:
# Для PHP 8.1
sudo apt install php8.1-dev
# Для PHP 8.2
sudo apt install php8.2-dev
# Для PHP 8.3
sudo apt install php8.3-dev
Способ 2: Установка PHP вместе с php-dev
Если PHP еще не установлен, можно установить все сразу:
# Установка PHP 8.2 с наиболее распространенными модулями
sudo apt install php8.2 php8.2-dev php8.2-cli \
php8.2-common php8.2-mysql php8.2-zip \
php8.2-gd php8.2-mbstring php8.2-curl \
php8.2-xml php8.2-bcmath
Проверка установки php-devel
После установки убедимся, что все работает правильно:
# Проверка установки phpize
phpize --version
# Проверка доступности заголовочных файлов
ls /usr/include/php*/
Что установилось с php-dev?
| Компонент | Назначение | Путь |
|---|---|---|
| phpize | Скрипт для подготовки расширений | /usr/bin/phpize |
| php-config | Конфигурация PHP для компиляции | /usr/bin/php-config |
| Заголовочные файлы | PHP API для разработки | /usr/include/php8.x/ |
Практический пример: Компиляция PHP-расширения
Давай создадим простое расширение, чтобы понять процесс:
# Создаем директорию для расширения
mkdir ~/my_php_extension
cd ~/my_php_extension
# Создаем config.m4 - конфигурационный файл расширения
echo 'PHP_ARG_ENABLE(myextension, whether to enable myextension support,
[ --enable-myextension Enable myextension support])
if test "$PHP_MYEXTENSION" != "no"; then
PHP_NEW_EXTENSION(myextension, myextension.c, $ext_shared)
fi' > config.m4
# Создаем основной файл расширения
echo '#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#define PHP_MYEXTENSION_VERSION "1.0"
PHP_FUNCTION(hello_world) {
php_printf("Hello from my PHP extension!\n");
}
static const zend_function_entry myextension_functions[] = {
PHP_FE(hello_world, NULL)
PHP_FE_END
};
zend_module_entry myextension_module_entry = {
STANDARD_MODULE_HEADER,
"myextension",
myextension_functions,
NULL,
NULL,
NULL,
NULL,
NULL,
PHP_MYEXTENSION_VERSION,
STANDARD_MODULE_PROPERTIES
};
#ifdef COMPILE_DL_MYEXTENSION
ZEND_GET_MODULE(myextension)
#endif' > myextension.c
# Используем phpize для подготовки расширения
phpize
# Конфигурируем
./configure
# Компилируем
make
# Устанавливаем
sudo make install
Распространенные проблемы и решения
Проблема 1: Пакет php-dev не найден
# Решение: Добавить репозиторий Ondřej Surý
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# Теперь пакеты будут доступны
Проблема 2: Отсутствуют зависимости для компиляции
# Решение: Установить build-essential и другие инструменты
sudo apt install build-essential autoconf automake libtool \
flex bison re2c pkg-config
Проблема 3: Несколько версий PHP на одном сервере
Используй update-alternatives для управления версиями:
# Настройка альтернатив для PHP
sudo update-alternatives --config php
# Выбери нужную версию из списка
# Затем установи соответствующий php-dev
Дополнительные инструменты для разработки PHP
Для полноценной разработки PHP-расширений рекомендую установить:
- gdb — отладчик для поиска сложных ошибок
- valgrind — инструмент для поиска утечек памяти
- phpunit — тестирование расширений
- phpdocumentor — документация кода
# Установка полезных инструментов
sudo apt install gdb valgrind phpunit php-documentor
Часто задаваемые вопросы (FAQ)
В чем разница между php-devel и php-dev?
В Red Hat-based системах (RHEL, CentOS, Fedora) пакет называется php-devel, а в Debian-based (Ubuntu, Debian) — php-dev. Это один и тот же пакет с разными именами в разных дистрибутивах.
Нужно ли перезагружать сервер после установки php-dev?
Нет, перезагрузка сервера не требуется. Однако если ты используешь PHP-FPM, нужно перезапустить его службу: sudo systemctl restart php8.x-fpm.
Можно ли установить php-dev без установки самого PHP?
Технически можно, но это бессмысленно. php-dev содержит инструменты для работы с конкретной версией PHP, поэтому сначала должна быть установлена соответствующая версия PHP.
Как удалить php-dev с Ubuntu?
sudo apt remove php8.x-dev
sudo apt autoremove
Какие файлы устанавливаются с php-dev?
Основные файлы: phpize, php-config, заголовочные файлы PHP в /usr/include/php8.x/, статические библиотеки и документация.