Подключение модулей (extensions) php во FreeBSD 10.1

Рейтинг: 1Ответов: 2Опубликовано: 06.05.2015

Есть машина с FreeBSD 10.1, сеть настроена, порты обновлены. Пытаюсь запустить сборку Apache 2.2 + MySQL + php5.5(+extensions) + phpMyAdmin. Apache запустился, страницу "It works!" отобразил. PHP тоже установился, для апача ставил модуль php55_mod. Получилось вывести phpinfo(). И вот на следуещем шаге у меня затык: не устанавливается phpMyAdmin:

Call to undefined function mb_detect_encoding() in /usr/local/www/phpMyAdmin/libraries/php-gettext/gettext.inc on line 177

После некоторого гугления понял, что дело в том, что у меня не установились модуль mbstring и еще до кучи. В логах однотипные ошибки:

Unknown(0) : Warning - PHP Startup: mbstring: Unable to initialize module
Module compiled with build ID=API20121212,NTS
PHP    compiled with build ID=API20121212,NTS,debug
These options need to match

Я понимаю, что у меня debug-php скомпилирован, хотя я явно не указывал Debug при конфигурировании. Или может я не так понимаю? Вообще суть вопроса проста: как мне добиться идентичности строк? Либо так:

Module compiled with build ID=API20121212,NTS,debug
PHP    compiled with build ID=API20121212,NTS,debug

Либо так:

Module compiled with build ID=API20121212,NTS
PHP    compiled with build ID=API20121212,NTS

Буду весьма благодарен за ответ.

Ответы

▲ 1Принят

Я взял виртуальную машину (qemu-kvm), поставил туда FreeBSD 10.1-RELEASE amd64 и попробовал воспроизвести Вашу проблему. Мои шаги:

# pkg bootstrap && pkg install perl5 python curl

Сэкономим немного времени, поставив некоторые зависимости руками, из пакетов, без сборки из исходников. Теперь займёмся портами:

# portsnap fetch extract && portsnap fetch update
# cd /usr/ports/lang/php55 && make config-recursive

Галка "DEBUG" в конфиге порта lang/php55 по умолчанию снята, может у Вас в ней дело? Оставляю всё, как есть, жму OK.

# cd /usr/ports/lang/php55-extensions && make config

В диалоге конфигурации порта lang/php55-extensions отмечаю в дополнение к отмеченному из коробки галки BCMATH, CURL, FTP, GD, GETTEXT, MBSTRING, MCRYPT, MYSQLI, OPENSSL, PDO_MYSQL, READLINE, SOCKETS, XMLRPC, ZIP. У остальных портов принимаю дефолтную конфигурацию. Теперь можно собирать PHP (ставим порт php55-extensions, порт php55 поставится как зависимость):

# make config-recursive && make install clean

PHP с модулями установлен. Ставим MySQL:

# cd /usr/ports/databases/mysql55-server && make install clean
# echo 'mysql_enable=YES' >> /etc/rc.conf && /usr/local/etc/rc.d/mysql-server start

Готово. Ставим Apache:

# cd /usr/ports/www/mod_php55 && make config-recursive && make install clean
# echo 'ServerName mytest.freebsd' >> /usr/local/etc/apache24/httpd.conf
# echo 'AddType application/x-httpd-php .php' >> /usr/local/etc/apache24/httpd.conf
# echo 'apache24_enable=YES' >> /etc/rc.conf && /usr/local/etc/rc.d/apache24 start

Apache запущен, "It Works" показывает, phpinfo() показывает все нужные модули. Поставим phpmyadmin:

# cd /usr/ports/databases/phpmyadmin && make install clean
# mv -- /usr/local/www/phpMyAdmin /usr/local/www/apache24/data/
# mkdir -p /usr/local/www/apache24/data/phpMyAdmin/config && chown -R www:www /usr/local/www/apache24/data/phpMyAdmin

phpmyadmin установлен, настроем его, зайдя на http://our-test-host/phpMyAdmin/setup/index.php, по окончании настройки получим файл config.inc.php, который надо подложить в корень pma:

# mv /usr/local/www/apache24/data/phpMyAdmin/config/config.inc.php /usr/local/www/apache24/data/phpMyAdmin/

Всё, можно логиниться в phpmyadmin и ломать MySQL. (на самом деле нет, так как из коробки у MySQL пользователь root логинится без пароля, а pma этому сопротивляется - надо или задать руту пароль, или добавить $cfg['Servers'][$i]['AllowNoPassword'] = 1; в конфиг pma.)

Не воспроизвелась у меня Ваша проблема. Где-то Вы что-то напутали, или мы изначально говорили о разных вещах - тогда мой эксперимент это должен показать.

Update: забыл про таймзоны:

# cd /usr/ports/misc/pecl-timezonedb && make install clean

и после этого перезапустить апач - PHP подхватит новую timezonedb, в чём можно убедиться в phpinfo():

Olson Timezone Database Version     2015.4
Timezone Database   external 
▲ 1

Вам надо пересобрать порт lang/php5-extensions, сделав make config и в открывшемся окошке выбрать нужные модули. То есть последовательность Ваших действий примерно такова (пишу по памяти, с путями могу путать):

$ su
# cd /usr/ports/lang/php5-extensions
# make config

(откроется псевдографическое окно конфигурации,
в котором нужно "довыбрать" нужные вам модули php)

# make deinstall reinstall clean

Добавлено: список собранных модулей php можно консольно посмотреть командой php -m