Иногда трудно понять, какие расширения PHP вам понадобятся, прежде чем устанавливать PHP. В случаях, когда вам необходимо добавить расширения позже, вам может повезти, и расширение может находиться в репозитории используемой вами ОС. Это может быть просто sudo apt-get install php5-intl
. В других случаях, однако, вам может понадобиться установить его из исходных кодов — Phalcon является одним из таких случаев, но он делает процедуру чрезвычайно простой , предлагая поддержку производителя, ярлыки и предварительно написанные инструкции для вашей ОС. Что, если такого нет для других расширений?
В этом руководстве мы рассмотрим установку некоторых пользовательских расширений в системах Linux (и OS X — процесс практически идентичен). Процедура очень похожа на ту, что мы уже делали на Nitrous.io , но адаптирована к локальной среде — точнее, Laravel Homestead . Вы можете легко получить инструкции по установке из этого руководства и применить их к другим дистрибутивам.
Загрузка ВМ
Если вы еще этого не сделали, прочитайте пост Homestead, связанный выше, и запустите его. Сразу после запуска новой коробки Homestead вы сможете сделать это:
Это прекрасно, потому что папка, которая монтируется по умолчанию, на самом деле еще не содержит файлов. Теперь vagrant ssh
в виртуальную vagrant ssh
и выполните следующие команды:
cd Code git clone https : //github.com/Swader/publicinfo
Это создает действительный файл PHP Info в пути, который Homestead установлен по умолчанию. Обновление URL теперь создаст экран PHPInfo:
Подготовка среды
Чтобы построить расширения из исходного кода, нам нужны инструменты PHP dev, установленные на нашем компьютере, а также компилятор, который может создать файл расширения. Вот как вы устанавливаете эти предварительные условия в различных операционных системах:
Ubuntu
sudo apt - get install php5 - dev php5 - mysql gcc libpcre3 - dev
мягкая фетровая шляпа
sudo yum install php - devel php - mysqlnd gcc libtool
RHEL
sudo yum install php - devel php - mysql gcc libtool
Suse
yast2 - i php5 - pear php5 - devel php5 - mysql gcc
Если вы используете самую последнюю версию Homestead, все эти инструменты уже будут установлены для вас. Все готово, давайте начнем установку расширений.
Установка расширений
Существует два типа расширений, которые вы можете установить: связанные с PHP, но не установленные по умолчанию, и сторонние расширения. Сторонние расширения, такие как Phalcon, обычно упрощают процесс установки, предоставляя ярлыки, так как они не должны соответствовать определенным традициям, с которыми связаны PHP-расширения.
Сначала перейдем в домашнюю папку на vm: cd ~
. Там создайте папку для downloads
и cd
в нее. При установке связанного расширения вам понадобится исходный код PHP на вашем компьютере, желательно тот, который соответствует вашей текущей версии. Версия, которую использует Homestead, — 5.5.12, поэтому я буду загружать ее:
wget http : //be2.php.net/distributions/php-5.5.12.tar.bz2 tar xvjf php - 5.5 . 12.tar . bz2 cd php - 5.5 . 12
Я использую бельгийское зеркало выше, не стесняйтесь использовать это или любое другое из архивов загрузки .
Чтобы увидеть источники всех связанных расширений, перейдите в папку ext
внутри папки с исходным кодом PHP без архива и составьте список с помощью ls
.
Установка в комплекте расширения
Сначала мы установим расширение PHP-intl, если оно еще не установлено. Если вы это сделаете, это нормально — процедура установки, которую вы увидите ниже, идентична для каждого связанного расширения PHP. Расширение intl предназначено для интернационализации — читайте больше здесь, если вам интересно.
Поскольку расширению intl необходимо наличие библиотеки ICU (как указано в требованиях ), давайте сначала установим ее.
sudo apt - get install icu - devtools icu - doc libicu - dev libicu52 libicu52 - dbg
В других дистрибутивах инструкции по установке могут отличаться. Для этого шага лучше всего обратиться к сайту ICU или к документации вашего индивидуального дистрибутива.
Как только ICU установлен, сделайте следующее, оставаясь в папке ext
:
cd intl phpize ./ configure -- enable - intl make sudo make install
Давайте объясним, что происходит.
-
phpize
подготавливает папку расширения к компиляции. Это позволяет вам выполнять последующие команды, создавая файлconfigure
, и в основном заставляя папку расширения «думать», что это сам PHP. Процедура послеphpize
фактически идентична той, что вы делали бы при установке PHP из исходного кода — только в этом случае только фрагмент PHP скомпилирован и подготовлен для использования с уже скомпилированным и установленным PHP. -
./configure --enable-intl
настраивает среду для компиляции. Он готовит все, что потребуется компилятору дляintl.so
файлаintl.so
который мы будем использовать. Флагenable-intl
необходим, даже если мы находимся в папкеintl
потому что папка, по сути, думает, что это PHP, и мы должны помочь ей пережить эту иллюзию. Эта команда говорит: «Хорошо, вы исходный код PHP. Теперь скомпилируйте и установите с расширением intl. », Хотя на самом деле это единственная часть, которую можно установить из этой папки. -
make
скомпилирует исходныеintl.so
вintl.so
, поместив файл в ту самую папку, в которой вы находитесь, воintl.so
папкеmodules
. -
sudo make install
переместит этот файл в папку расширений текущей установки PHP.
Все, что нам нужно сделать сейчас, это включить расширение, используя php.ini
. Мы сделаем это позже, давайте сначала скомпилируем стороннее расширение.
Установка стороннего расширения
Мы будем устанавливать Mongo как стороннее расширение. Для Mongo доступны бинарные дистрибутивы, которые упрощают установку, но давайте сделаем это вручную ради образования. Мы предполагаем, что у вас уже есть установленный Mongo, и поэтому мы сосредоточены только на расширении PHP. Если у вас не установлен Mongo, обратитесь к документации по установке .
git clone https : //github.com/mongodb/mongo-php-driver cd mongo - php - driver phpize ./ configure make sudo make install
Это создало наш файл mongo.so и поместило его в папку расширений нашей установки PHP. Мы включим его в следующем разделе.
Включение и тестирование
Чтобы увидеть, действительно ли скомпилированные файлы .so
находятся в нашей папке расширений PHP, перечислите их содержимое:
Как видите, они выделены ярко-зеленым цветом.
Чтобы включить их, нам нужно рассказать о них php.ini
. Есть несколько способов сделать это:
- Вы можете поместить строки
extension=mongo.so
иextension=intl.so
непосредственно вphp.ini
. Это работает, и в большинстве случаев это совершенно правильный подход. - Вы можете создать отдельный
ini
файл для каждого из них, поместить их в папку, которая автоматически включается после загрузкиphp.ini
, и таким образом поддерживать разделение и изоляциюphp.ini
. Такой подход полезнее, но труднее его реализовать. - Вы можете комбинировать 2) и инструменты по умолчанию для включения модов PHP. Усадьба использует этот подход, и мы тоже.
cd `/etc/php5/mods-available`
Эта папка является хранилищем всех таких отдельных ini
файлов. Создайте два новых файла здесь:
sudo touch mongo . ini echo "extension=mongo.so" | sudo tee - a mongo . ini sudo touch intl . ini echo "extension=intl.so" | sudo tee - a intl . ini
Эти команды создали два новых ini
файла, каждый для одного из расширений, которые мы создали ранее. Поскольку они сейчас находятся в папке mods-available
, мы можем использовать уже доступный инструмент командной строки php5enmod
(сокращение от PHP enable mod).
sudo php5enmod mongo sudo php5enmod intl
Примечание. Если у вас нет инструмента php5enmod
, сделайте символическую ссылку на ini
файлы в папке conf.d
различных сред выполнения php
:
ln - s / etc / php5 / mods - available / mongo . ini / etc / php5 / cli / conf . d / mongo . ini ln - s / etc / php5 / mods - available / intl . ini / etc / php5 / cli / conf . d / intl . ini ln - s / etc / php5 / mods - available / mongo . ini / etc / php5 / fpm / conf . d / mongo . ini ln - s / etc / php5 / mods - available / intl . ini / etc / php5 / fpm / conf . d / intl . ini
Причина, по которой есть четыре записи, заключается в том, что у нас есть версия PHP для командной строки и версия PHP для FPM. Каждый использует свой собственный файл php.ini
, и каждый загружает свою собственную папку conf.d
для расширений — следовательно, нам нужно добавить оба расширения в обе версии PHP, если мы хотим, чтобы расширения были доступны повсюду. Используйте этот подход, только если у вас нет инструмента php5enmod
.
Наконец, давайте перезапустим nginx и php-fpm для загрузки этих изменений.
sudo service nginx restart sudo service php5 - fpm restart
Чтобы увидеть, установили ли мы их, обновите экран PHPinfo ранее и найдите mongo и intl соответственно.
Успех!
Удаление расширений
Чтобы удалить расширения, нет необходимости удалять какие-либо реальные файлы, если у вас мало места. Вы можете сделать это тремя способами:
- Запустите
php5dismod
если у вас есть инструмент. Это противоположность инструментуphp5enmod
, упомянутому выше. Файлы.so
останутся на месте, а файлыini
останутсяmods-available
, они просто не будут загружаться, потому что их символические ссылки будут удалены из папокconf.d
иconf.d
- Удалите символические ссылки вручную. Например,
sudo rm /etc/php5/cli/conf.d/mongo.ini
- Если вы включили расширения, поместив их непосредственно в файлы
php.ini
, удалите эти строки из файловphp.ini
или, что еще лучше, прокомментируйте их, чтобы они оставались доступными для дальнейшего использования, если вы когда-нибудь передумали.
Вывод
Как видите, установка расширений из исходного кода чрезвычайно проста, даже если нет точных инструкций и даже если расширение не поддерживается официальным репозиторием ОС. В следующий раз, когда вам нужно будет добавить расширение в вашу установку PHP в системе * nix (это руководство также применимо и к OS X), обратитесь к этому посту за обновлением.
Пожалуйста, оставьте свой отзыв ниже, и дайте мне знать, если вас смущает определенное расширение и вы хотите помочь с его установкой.