Статьи

И работает с самой быстрой PHP Framework на PHP7 за 5 минут

Возможно, вы помните наше прошлое увлечение Phalcon , самой быстрой платформой PHP.

В этом посте мы рассмотрим процесс его установки и запуска за 5 минут на одном из наших экземпляров Homestead Improved . Если вас не интересует, почему или чем является Phalcon, просто перейдите к разделу «Настройка».

Phalcon PHP логотип

резюмировать

Если вы не знакомы с этим, Phalcon — это PHP-фреймворк, написанный на Zephir , языке, находящемся посередине между C и PHP, который помогает в разработке расширений PHP без знания C. Это золотая середина, которая позволяет разработчикам PHP активно развиваться. оптимизированные модули для их языковой среды программирования без необходимости изучения совершенно нового языка, потому что Zephir компилируется в C, из которого сделаны расширения PHP.

Изначально Phalcon был расширением, написанным на чистом C, что делало его невероятно быстрым. Однако это также привело к значительным накладным расходам на исправление ошибок или проверку того, что происходит под капотом, когда что-то работает не так, как должно. Кроме того, потребовалось много времени, чтобы добавить новые функции, поскольку разработка на C намного сложнее. Во второй версии Phalcon был переписан на Zephir, но, поскольку PHP 7 вырисовывался на горизонте и объявил о значительном отходе от API расширения PHP 5+, Zephir не смог скомпилировать код в расширения, совместимые с PHP 7, и остался в PHP 5 земля.

Мы пытаемся преодолеть этот край, и в нашем арсенале больше не осталось места для Фалкона. С нашей коробкой Homestead Improved, готовой к работе и включающей все наши учебные пособия, а также с повышением производительности PHP 7, компенсирующим любой прирост скорости, который Phalcon мог предложить в PHP 5 раз, стоимость установки Phalcon больше не стоила этого ни в каком случае. ,

В последнее время все изменилось: вышел Phalcon 3.0 LTS .

Помимо отслеживания Semver с этого момента, поддержки версии 3.0 в течение следующих 3 лет и различных новых функций и изменений, о которых вы можете прочитать в этом посте, самым большим обновлением на сегодняшний день является тот факт, что Zephir теперь поддерживает PHP 7 и позволяет не только компиляция Phalcon, но и компиляция любого другого кода Zephir в PHP 7. Теперь вы можете легко перенести свои пользовательские расширения в Zephir и быстро скомпилировать их в PHP 7. Скомпилированная структура в сочетании с повышением производительности PHP 7 предлагает беспрецедентные преимущества с точки зрения скорости и экономии ресурсов.

Настройка его

Теперь мы пройдем процесс настройки Phalcon 3 на экземпляре Homestead Improved с поддержкой PHP 7. Вы можете использовать любую среду, в которой вы чувствуете себя комфортно, но нижеприведенные инструкции будут относиться к экземпляру Ubuntu 16.04 с установленным PHP 7+ и таким вещам, как Git и Wget. Мы также будем использовать Homestead Improved способ определения новых сайтов через файл Homestead.yaml .

Установка Phalcon

 sudo apt-get install software-properties-common sudo apt-add-repository ppa:phalcon/stable sudo apt-get update sudo apt-get install php7.0-phalcon sudo phpenmod -v 7.0 -s ALL phalcon sudo service php7.0-fpm restart 

Вторая команда — это быстрая команда для включения расширения PHP. Флаг -v указывает, для какой версии PHP его активировать (здесь мы хотим только 7.0), а для какого SAPI (командной строки, FPM или обоих — мы хотим и то, и другое).

Если этот инструмент недоступен в вашей системе, просто скопируйте ini файл в папку расширений следующим образом:

 sudo cp /etc/php/7.0/mods-available/phalcon.ini /etc/php/7.0/fpm/conf.d/20-phalcon.ini sudo cp /etc/php/7.0/mods-available/phalcon.ini /etc/php/7.0/cli/conf.d/20-phalcon.ini 

Префикс 20 указывает приоритет в случае, если некоторые расширения должны быть загружены раньше других. Это не тот случай, здесь.

Теперь мы выпустили зверя . Глядя на phpinfo() , он там есть.

Phalcon активен в phpinfo

Демо Phalcon App

Мы можем проверить вещи в демонстрационном приложении Phalcon — готовом приложении Invo .

Настройка Nginx для Phalcon

Нам нужно добавить наше приложение в блок Sites сайта Homestead.yaml :

  - map: phalcon-tut.app to: /home/vagrant/Code/phalcon-tut/public 

Убедитесь, что phalcon-tut.app или phalcon-tut.app вами имя виртуального хоста добавлено в ваш файл операционной системы /etc/hosts для разрешения IP-адреса виртуальной машины.

Конечно, нам также нужно запустить vagrant provision вне виртуальной машины, чтобы применить эту настройку Nginx.

Наконец, мы редактируем блок location Nginx и меняем

 location / { try_files $uri $uri/ /index.php?$query_string; } 

в

 location / { try_files $uri $uri/ /index.php?_url=$uri&$args; } 

Нам нужно перезапустить Nginx, чтобы применить изменения:

 sudo service nginx restart 

Это заботится о конце сервера вещей.

Начальная загрузка приложения

 cd /home/vagrant/Code git clone https://github.com/phalcon/invo phalcon-tut 

Как только приложение было клонировано, нам нужно инициализировать его базу данных в соответствии с инструкциями . Мы обновим их, чтобы они стали немного современнее, используя utf8mb4 вместо utf8 .

 echo 'CREATE DATABASE invo CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' | mysql -u homestead -psecret cat schemas/invo.sql | mysql -u homestead -psecret invo 

Есть еще один шаг, который не описан в репозитории приложения — изменение baseUri в конфигурации. Мы должны зайти в app/config/config.ini и изменить baseUri на / , иначе ресурсы (JS / CSS) не будут загружены.

После этого, конечно же, INVO работает.

Скриншот Invo

Вывод

В этом руководстве мы быстро настроили Phalcon для работы на Homestead Improved и PHP 7 и запустили демонстрационное приложение. С инструкциями по установке значительно упрощенными по сравнению с тем, что они были, и с готовыми приложениями для тщательного тестирования, почему бы не пойти на тестовый запуск Phalcon и рассказать нам, что вы думаете?

Теперь, когда Phalcon доступен на PHP 7, будете ли вы использовать его для любого из ваших новых проектов? Как вы относитесь к Zephir — будете ли вы использовать его для закрытия или гипероптимизации любого из ваших микросервисов / модулей, или вы все еще чувствуете, что это слишком много накладных расходов?