Связаться со мной:
6 заметок с тегом

php7

Менеджер версий php для Debian/Ubuntu.

Выкладываю мой скрипт который поможет установить несколько версий php из исходных кодов на ваш сервер. Скрипт делался в первую очередь для Debian и проверялся на Debian 8 x64. Но работает и на Ubuntu. Удобно с помощью скрипта поддерживать актуальные версии php на сервере с вестой, т.к скрипт умеет автоматически обновлять шаблоны весты при сборке.
На debian 7/8 с моими флагами установки без проблем собираются php 5.2 и выше.
На ubuntu 14.04/16.04 по умолчанию собираются php 5.3 и выше. 5.2 при компиляции валится с ошибкой. Поэтому если нужен 5.2 юзайте дебиан.
Что делает скрипт:

  1. При запуске спрашивает какие версии php требуется собрать(версию нужно вводить полностью. Например 7.1.2, а не 7.1. Можно ввести несколько версий через пробел), создавать ли на бинарник php-cgi симлинк в /usr/bin для быстрого доступа. Проверяет наличие на сервере панели vestacp. Если находит её, то спрашивает создавать ли шаблон web для каждой версии.
  2. При первом запуске спрашивает, нужно ли ставить зависимости. Если вы откажетесь от установки зависимостей, то вам нужно их установить самостоятельно. Иначе при сборке вы получите ошибки. При последующих запусках этот шаг пропускается. Нужно понимать что скрипт старается поставить все возможные зависимости, но в разных дистрибутивах могут использоваться разные пакеты или при использовании кастомных флагов компиляции может потребоваться что-то доустановить.
  3. Парсит http://php.net/downloads.php и http://php.net/releases/ на наличие bz2 архива с исходниками указанной юзером версии php. Если находит, скачивает и распаковывает исходники в /opt/php/src.


    Также можно положить архивы с иходниками в /opt/php/src/bzips, тогда скрипт не будет их скачивать.
  4. Конфигурит, по умолчанию с моими параметрами компиляции(подойдут для большинства пользователей). Собирает.

    Тем кто хочет использовать свои параметры компиляции обязательно кликнуть сюда
    Можно свои параметры конфигурирования положить в файл /opt/php/options. Если скрипт находит этот файл, то он использует его для конфигурирования. Свой файл можно сделать на основе моего. Скрипт заменяет version в файле конфигурирования на текущую собираемую версию. Это сделано для того чтобы скрипт автоматом создавал свой каталог для каждой версии. Если вы собираете например версию 5.3.29 и в вашем файле конфигурирования указано prefix=/opt/php/php-version, то это по сути равно prefix=/opt/php/php-5.3.29. При сборке нескольких версий одновременно эту фичу нужно использовать чтобы не собирать все версии в один каталог.
  5. При необходимости создает симлинк и шаблон для весты. Если создает темплейты для весты, то проверяет включен ли модуль cgi в апаче. Если модуль не включен, то включает его.

Запустить скрипт очень просто

# git clone https://github.com/petranikin/mgrvphp.git
# cd mgrvphp
# bash mgrvphp

Немного скриншотов

2017   debian   mgrvphp   php   php7   phpmgr   ubuntu   vesta control panel   vestacp

Шаблон VDS с VestaCP c мультиверсионностью PHP

На наших VDS теперь доступен готовый шаблон Debian 8 с предустановленной панелью VestaCP и уже собранными версиями PHP от 5.2 до 7.1 включительно. Версию PHP можно выбирать свою для каждого сайта. Заказать VDS можно по этой ссылке. После выдачи VDS нужно зайти в панель управления VDS, кликнуть «Переустановка VDS» и выбрать шаблон «debian-8-X86_64-vestacp_multiphp»

Пароль пользователя admin в весте, совпадает с паролем root.

2017   php   php7   vesta control panel   vestacp

Мультиверсионность php на CentOS с VestaCP.

В комментариях к статье Мультиверсионность php на сервере с VestaCP один из читателей попросил написать статью как сделать тоже самое на CentOS. Я уже приготовился писать статью про компиляцию php из исходников, но почитав форум весты увидел что все уже сделано за меня.

На официальном форуме VestaCP есть скрипт, который добавляет репозиторий с уже собранными версиями php 5.5, 5.6 и 7.0. По умолчанию в CentOS 6.8 установлен php 5.4. В итоге после установки скрипта мы имеем все версии php начиная от 5.4.

Установка супер простая

# wget http://mirror.skamasle.com/vestacp/PHP/sk-phpinstaller_beta02_3.sh
# bash sk-phpinstaller_beta02_3.sh

Вывод установщика не очень многословен

После установки при редактировании виртуального хоста в web-шаблонах мы видим что появились новые пункты с новыми версиями php.

Пробуем переключится и смотрим phpinfo

Как видим, все работает. За скрипт спасибо пользователю с ником skamasle.

2016   php   php7   vesta control panel   vestacp

Мультиверсионность php на сервере с VestaCP.

Можно использовать скрипт который упрощает установку разных версий php
Сделаем возможность использовать несколько разных версий php на одном сервере c Ubuntu 14.04 и VestaCP. Возможность переключать версию php будет для каждого сайта отдельно. По умолчанию в ubuntu 14.04.4 с вестой установился php 5.5.

Все действия производятся под root’ом.
Соберем старый php 5.4.
Установим необходимые пакеты.

apt-get build-dep -y php5
apt-get install libt1-dev libonig-dev libmcrypt-dev libreadline-dev

Создаем каталог для исходников

mkdir /php/
mkdir /php/src

Скачиваем туда сорцы с http://php.net.

wget -O /php/src/php-5.4.45.tar.bz2 http://de1.php.net/get/php-5.4.45.tar.bz2/from/this/mirror
cd /php/src/
tar -xjf php-5.4.45.tar.bz2
cd php-5.4.45

И создаем каталог куда будем собирать php

mkdir /php/php54

Конфигурим(обратите внимание на переменную —prefix=, она указывает на каталог куда собираем php)

./configure \
--prefix=/php/php54 \
--with-config-file-path=/etc \
--with-regex=php \
--disable-rpath \
--disable-static \
--with-pic \
--with-layout=GNU \
--enable-calendar \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-bcmath \
--with-bz2 \
--enable-ctype \
--with-cdb \
--with-iconv \
--enable-exif \
--enable-ftp \
--with-gettext \
--enable-mbstring \
--with-onig=/usr \
--with-pcre-regex=/usr \
--enable-shmop \
--enable-sockets \
--enable-wddx \
--with-libxml-dir=/usr \
--with-zlib \
--with-kerberos=/usr \
--with-openssl=/usr \
--enable-soap \
--enable-zip \
--with-mhash=yes \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--enable-pdo \
--with-pdo-mysql=mysqlnd \
--enable-exif \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--with-freetype-dir=/usr \
--with-t1lib \
--with-zlib-dir=/usr \
--with-mcrypt=/usr \
--with-mhash \
--with-xsl=/usr \
--enable-zip \
--enable-cgi \
--with-curl \
--with-gd \
--enable-pcntl \
--enable-mbregex \
--enable-gd-native-ttf \
--with-libdir=lib64 \
--enable-dba=shared \
--enable-intl \
--with-readline=/usr \
--enable-simplexml \
--with-libdir=/lib/x86_64-linux-gnu \
--with-config-file-scan-dir="$instdir"/etc \
--with-pspell

Компиляем

make
make install

Включаем модуль cgi для апача

a2enmod cgi

Переключать будем шаблонами apache. Скопируем существующий шаблон phpcgi

cp /usr/local/vesta/data/templates/web/apache2/phpcgi.sh /usr/local/vesta/data/templates/web/apache2/php54.sh
cp /usr/local/vesta/data/templates/web/apache2/phpcgi.stpl /usr/local/vesta/data/templates/web/apache2/php54.stpl
cp /usr/local/vesta/data/templates/web/apache2/phpcgi.tpl /usr/local/vesta/data/templates/web/apache2/php54.tpl

Открываем файл /usr/local/vesta/data/templates/web/apache2/php54.sh и находим там строку

wrapper_script='#!/usr/bin/php-cgi -cphp5-cgi.ini'

заменяем на

wrapper_script='#!/php/php54/bin/php-cgi -cphp5-cgi.ini'

И перезапускаем весту

service vesta restart

Теперь если зайти в весте в редактирование домена в web, то в шаблонах апача можно увидеть новый шаблон php54. Можно попробовать переключится.

Аналогично собираем php 5.6 и php 7.0, в каталоги /php/php56 и /php/php70 соответсвенно. И создаем для них шаблоны php56 и php70. Конфигурирование для php7 несколько отличается от php5. Мои параметры для конфигурирования есть в этой статье.

В результате этих манипуляций у нас появятся новые шаблоны php54, php56 и php70, с соответсвующими версиями php. Теперь для каждого домена мы можем выбрать любую версию php от 5.4 до 7.0. С выходом новых версий их можно добавлять к текущим таким же способом.

2016   php   php7   ubuntu   vesta control panel   vestacp

Переводим php движки с mysql на mysqli

Начиная с PHP 5.5.0 функции модуля mysql считаются устаревшими(deprecated), а в PHP 7 данный модуль вообще отсутствует, вместо него нужно использовать mysqli. Движки написаные с помощью функций модуля mysql не работают, т.к не могут подключится к базе данных и выдают в логе ошибки типа такой:

PHP Fatal error:  Uncaught Error: Call to undefined function mysql_connect() in...

К счастью, исправить все функции mysql на mysqli можно автоматически, скриптом на любом сайте.

Вот здесь скачиваете zip архив. Создаете в каталоге домена подкаталог например convert и кладете туда содержимое архива.
Потом переходите по ссылке вида
http://ваш_домен.ru/convert/GUI/index.php
И видите

Тут я выбирал «Convert a file», т.к в ошибке указан файл в котором присутствует эта функция. Указываем путь к файлу примерно как на картинке. И выбираем сразу заменить старый файл и забекапить.

Затем жмакаем «Start the conversion» и наслаждаемся результатом.

2015   mysql   mysqli   php   php7

Установка php 7 на Debian 8 «jessie» из исходных кодов

Можно использовать скрипт который упрощает установку разных версий php
Сегодня дождливый и пасмурный день. И нет ничего более уютного и расслабляющего чем попивая горячий чай собирать ПО из исходников. Поэтому самое время собрать php 7 на debian 8.
У нас есть тачка с debian 8, установленым с образа netinstall. Установка минимальная, кроме ssh ничего не ставилось.
Для установки php 7 нам нужно выполнить по ssh или в консоли тачки несколько ругательств из под рута.
Первым делом установим все необходимые для сборки пакеты:

# apt-get install git apache2 mysql-server make autoconf gcc bison libxml2 \
libxml2-dev libcurl4-openssl-dev pkg-config libssl-dev \
bzip2 libbz2-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev \
libgmp-dev libgmp3-dev libmcrypt-dev libmysqlclient-dev \
libpspell-dev librecode-dev

Также нам нужен пакет libt1-dev, который отсутствует в репах debian 8, возьмем его из репов debian 7 wheezy, для этого добавим в /etc/apt/sources.list следующую строку

deb http://ftp.debian.org/debian wheezy main contrib non-free

Затем выполняем:

# apt-get update
# apt-get install libt1-dev

Затем убираем добавленную строку из /etc/apt/sources.list и затем выполняем

# apt-get update

Теперь сделаем симлинк gmp.h в /usr/include/

# ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

Теперь все готово для сборки. Создадим папку для исходников и скачаем их туда.

# mkdir /root/php7
# cd /root/php7
# git clone https://git.php.net/repository/php-src.git

Переходим к сырцам и конфигурим

# cd php-src
# ./buildconf
# ./configure \
    --prefix=/usr \
    --with-config-file-path=/etc \
    --enable-mbstring \
    --enable-zip \
    --enable-bcmath \
    --enable-pcntl \
    --enable-ftp \
    --enable-exif \
    --enable-calendar \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --with-curl \
    --with-mcrypt \
    --with-iconv \
    --with-gmp \
    --with-pspell \
    --with-gd \
    --with-jpeg-dir=/usr \
    --with-png-dir=/usr \
    --with-zlib-dir=/usr \
    --with-xpm-dir=/usr \
    --with-freetype-dir=/usr \
    --with-t1lib=/usr \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --with-openssl \
    --with-mysql=/usr \
    --with-pdo-mysql=/usr \
    --with-gettext=/usr \
    --with-zlib=/usr \
    --with-bz2=/usr \
    --with-recode=/usr \
    --with-mysqli=/usr/bin/mysql_config

Если все в порядке, то результатом выполнения предыдущей команды будет что-то типа:

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

Далеее выполняем

# make
# make install

Проверяем, что установка прошла успешно

root@debian:~/php7/php-src# php -v
PHP 7.0.0-dev (cli) (built: May 23 2015 15:48:27) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies

Вобщем то php7 установлен, но если мы хотим заставить веб-сервер обрабатывать php, то надо ещё настроить apache2.
Заставим apache2 обрабатывать php, с помощью php-cgi.
У меня в системе есть пользователь user, и я решил сделать для него виртуальный хост.
Создаем каталог cgi-bin у пользователя

# mkdir /home/user/cgi-bin/

Создаем файл /home/user/cgi-bin/php со следующим содержимым

#!/usr/bin/php-cgi

И выставляем права 555 на него

# chmod 555 /home/user/cgi-bin/php

Создаем файл /home/user/cgi-bin/php.ini со следующим содержимым

max_execution_time=600
memory_limit=128M
error_reporting=0
display_errors=0
log_errors=0
user_ini.filename=
realpath_cache_size=2M
cgi.check_shebang_line=0
 
zend_extension=opcache.so
opcache.enable_cli=1
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0

Создаем каталог для виртуалхоста

# mkdir /home/user/www

И кладем в него index.php со следующим содержимым

<?php
phpinfo();
?>

И т.к мы все делали из под рута, то меняем владельца всех этих созданных файлов и каталогов на user

# chown -R user:user /home/user/

Теперь нужно настроить apache2. Добавим необходимые модули в apache2

# a2enmod actions
# a2enmod cgi

Заменим конфиг /etc/apache2/sites-enabled/000-default.conf на такой

<Directory /home/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
<VirtualHost *:80>
DocumentRoot /home/user/www
ScriptAlias /cgi-bin/ "/home/user/cgi-bin/"
AddType application/x-httpd-php .php .php3
Action  application/x-httpd-php /cgi-bin/php
DirectoryIndex index.php
</VirtualHost>

И перезапустим apache2

# service apache2 restart

Теперь мы можем зайти браузером на ip тачки и увидеть страницу php info.

Аналогично можно настроить другие виртуальные хосты.

Про настройку разных версий php для каждого сайта на одном сервере можно прочитать в статье про мультиверсионность php.

2015   apache2   debian   php   php7