PHP 7.0 и PHP 5.6 на одном сервере

php-v7-logo

Внимание! Для полной установки и настройки веб-сервера, перейдите СЮДА

В последней версии Ubuntu 16.04 Xenial в репозитория пропал PHP 5.6, т.к. уже давно полноценно работает новая версия — PHP 7.0.

Но возможно кому то, как и мне (я не успел еще протестировать свои приложения на новой версии)  нужен php 5.6, так почему же не установить их вместе?

Шаг 1. Репозитироии PHP 5.6

Если вы хотите использовать php 5.6, добавим репозиторий для старой версии:

$ sudo add-apt-repository ppa:ondrej/php

Обновим репозитории:

$ sudo apt-get update

Шаг 2. Установка PHP

Теперь давайте установим обе версии php (или  устанавливаем нужную)

$ sudo apt-get install php5.6
$ sudo apt-get install php7.0

Шаг 3. Дополнительные модули

Для нормальной работы веб-сервера, мне пришлось еще доставить недостающие модули.

$ sudo apt-get install php5.6-mbstring php5.6-mysql php5.6-gd
$ sudo apt-get install php-mbstring php7.0-mbstring php-gettext
$ sudo apt-get install php7.0-mysql

И включить Mod Rewrite

Переключение и конфигурация

Конфиг файлы (php.ini) можно найти здесь:
PHP 5.6

/etc/php/5.6/

PHP 7

/etc/php/7.0/

 

Переключать активные версии можно командами:
Отключаем PHP 5.6

$ sudo a2dismod php5.6

Включаем PHP 7

$ sudo a2enmod php7.0

Перегружаем апач

$ sudo service apache2 restart

И обратно
Проверить рабочую версию в данный момент, можно функцией phpinfo

<?php phpinfo(); ?>

Или продолжайте установку веб-сервера LAMP с Шага 3.1

Установка и настройка Apache, PHP, MySQL, phpMyAdmin на Ubuntu 14.04 LTS + 16.04 LTS

UPD. Статья обновлена до актуальной версии 24.08.2016
Однажды я уже писал статью, о том как установить  Lamp  на убунту, но с тех пор многие компоненты изменились, и соответственно, их установка изменилась.

Большинство команд выполняем в терминале (Ctrl+Alt+T)

Шаг 1. Установка Apache.

$ sudo apt-get install apache2

Далее перейдите по адресу http://localhost и вы должны увидеть стартовую страницу apache.

apache

Apache — стартовая страница.

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

apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Set the ‘ServerName’ directive globally to suppress this message

Откройте конфиг апача:

$ sudo nano /etc/apache2/apache2.conf

В конце файла добавьте строки:

ServerName 127.0.0.1

 

Шаг 2. Установка MySQL.

$ sudo apt-get install mysql-server mysql-client

В ходе установке, нужно задать пароль администратора баз данных.

mysql config

Установка пароля

Проверьте, установку:

$ sudo service mysql status

в ответ должны увидеть что-то типа если у вас Ubuntu 14.04:

$ mysql start/running, process 3470

Или если у вас Ubuntu 16.04:

1471984511297

Шаг 3. Установка PHP

Для Ubuntu 16.04

Внимание! Если у вас Ubuntu 16.04 и выше тогда перейдите СЮДА

Для Ubuntu 14.04

$ sudo apt-get install php5 php5-mysql libapache2-mod-php5

Шаг 3.1 Проверка работы PHP

Создадим файл test.php

$ sudo nano /var/www/html/test.php

Добавим следующее содержание

<?php
phpinfo();
?>

И откроем в браузере ссылку: http://localhost/test.php

Вы должны увидеть информацию о установленном php, его версию, модули, и т.д.

phpinfo

Информация о PHP

Шаг 3.2 Настройка php.ini

Откроем php.ini для редактирования.
Для Ubuntu 14.04

$ sudo nano /etc/php5/apache2/php.ini

Для Ubuntu 16.04 PHP 5.6

$ sudo nano /etc/php/5.6/apache2/php.ini

Для Ubuntu 16.04 PHP 7.0

$ sudo nano /etc/php/7.0/apache2/php.ini

Находим директиву short_open_tag , и включаем ее, заменяем off на on

Этим мы включили  возможность использования коротких тегов php: <? ?>

P.S Из-за этой настройки, я два вечера не мог разобраться, почему у меня не работал скрипт, и выдавал ошибку:

Parse error: syntax error, unexpected ‘}’ in …

Раньше данная директива по-умолчанию была включена

Шаг 4. Установка phpMyAdmin.

$ sudo apt-get install phpmyadmin

Отвечаем на все вопросы, заданные при установке.
Проверим установку, перейдя по адресу http://localhost/phpmyadmin/

Вы увидите страничку авторизации.

Вводим логин и пароль, заданный администратора баз данных, при установке MySQL.

phpmyadmin

phpMyAdmin — авторизация

Шаг 5. Настройка виртуальных хостов.

Для удобства я размещаю свои сайты в домашней директории.

Создадим каталог в котором будет размещены наши сайты.

$ mkdir www

Далее каталог нашего сайта.

$ mkdir www/site.com

Создадим тестовый файл

$ nano www/site.com/index.php

И напишем что-то для проверки:

<?php echo '<h1>Hello world</h1>'; ?>

Создаем новый виртуальных хост.

Копируем файл шаблона.

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site.com.conf

Открываем его для редактирования.

$ sudo nano /etc/apache2/sites-available/site.com.conf

Вставляем следующие строки:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName site.com
DocumentRoot /home/gansik/www/site.com
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/gansik/www/site.com/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Обратите внимание, не забудьте подставить свои данные.
gansik — имя моего пользователя

site.com — адрес моего сайта.

Включаем наш сайт

$ sudo a2ensite site.com

Перезагружаем apache

$ sudo service apache2 restart

Редактируем hosts, для того, чтобы мы могли зайти на сайт, по нашему адресу.

$ sudo nano /etc/hosts

В первой строке, после localhost, добавим адрес нашего сайта site.com 

hosts

Hosts

Сохраняем, закрываем, и переходим по адресу нашего локального сайта site.com  , в ответ мы должны увидеть Hello world.

На этом вся настройка завершена

Пара ошибок веб-сервера, после обновления до Ubuntu 13.10

На днях обновился до очередной новой версии Ubuntu 13.10 Saucy salamander. Все прошло без проблем и достаточно быстро (около 30 мин.).

Ubuntu-13-10-Saucy-Salamander-Has-Officially-Started

Ubuntu 13.10 Saucy Salamander

Не запускается apache

Перегрузился,  и попытался запустить свой локальный сайт.

Опа, а сайт то не открылся, веб-сервер не доступен.

Попытался запустить его вручную:

$ sudo /etc/init.d/apache2 start

В ответ ошибка:

$ sudo service apache2 restart
* Restarting web server apache2 [fail]
* The apache2 configtest failed.
Output of config test was:
AH00526: Syntax error on line 84 of /etc/apache2/apache2.conf:
Invalid command 'LockFile', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.

Решение

Открываем для редактирования конфиг апача, например через gedit:

$ sudo gedit /etc/apache2/apache2.conf

находим строку:

LockFile ${APACHE_LOCK_DIR}/accept.lock

И заменяем ее на :

Mutex file:${APACHE_LOCK_DIR} default

И снова запускаем апач. Сервер должен запустится.

$ sudo /etc/init.d/apache2 start

Не работает функция strtotime()

После удачно запуска веб-сервера снова попытался открыть свой сайт. Сайт открывался, но посыпались ошибки php функции strtotime:

Warning: strtotime() [function.strtotime]: It is not safe to rely on the system’s timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier…

Решение

Как видно из текста ошибки нам нужно установить значение date.timezone в конфигурации php.
Открываем для редактирования php.ini

$ sudo gedit /etc/php5/apache2/php.ini

Находим строку:

date.timezone

Раскомментируем ее, убрав точку с запятой (;) перед ней.
И подставляем значение своей временной зоны.
Например для Украины это «Europe/Kiev», для России — «Europe/Moscow», Беларусь — «Europe/Minsk»,
с полным списком можно ознакомится здесь: http://php.net/date.timezone
В итоге строка должна выглядеть вот так:

date.timezone = «Europe/Kiev»

Сохраняем и перезапускаем наш апач:

$ sudo /etc/init.d/apache2 restart

На этом и все. Теперь функция strtotime() должна корректно работать.

Установка и настройка LAMP (Apache, MySQL, PHP)

Решил написать статью как заметку для самого себя, ведь не возможно все запомнить, заодно и кому то будет полезно.

LAMP — набор серверного программного обеспечения, для работы и разработки веб-приложений (Linux, Apache, MySQL, PHP)

И так начнем с установки самого основного. Apache, MySQL, PHP

sudo apt-get install apache2 php5 php5-mysql mysql-server

Отвечаем на все вопросы походу установки (задаем пароль для root-пользователя mysql)

Установки phpMyAdmin

sudo apt-get install phpmyadmin

Отвечаем на вопросы.

На первый выбираем apache (вы бор делаем нажатием на пробел).

Настроить базу данных для phpmyadmin с помощью dbconfig-common?

Выбираем — Да.

Вводим пароль рута mysql, и задаем пароль для пользователя phpmyadmin

После установки, переходим  по адресу http://localhost/  и вы должны увидеть надпись вида:

It works!

This is the default web page for this server.

Если надпись вы увидели, значит все хорошо. Первый шаг готов.

PhpMyAdmin должен открыться по адресу: http://localhost/phpmyadmin/

Настройка

Для начала пропишем в hosts домен нашего будущего сайта.
sudo nano /etc/hosts

в  первой строке, после 127.0.0.1       localhost через пробел прописываем свои домены по которым будет доступен сайт.

например у меня выглядит это вот так:

что бы сохранить нажимаем Ctrl-O, Enter, Ctrl+X

Чтоб апач на ругался на  отсутствие название сервера настроим его.

sudo nano /etc/apache2/apache2.conf

В конце файла напишем

ServerName 127.0.0.1

Настройка виртуальных хостов

Далее настроим возможность работы нескольких сайтов.

Переходим в папку с хостами

cd /etc/apache2/sites-available/

Копируем настройки в новый файл (будущего сайта)

sudo cp ./default ./auto.dev

Вместо auto.dev — домен вашего сайта.

откроем наш новый файл настройки хоста.

sudo nano auto.dev

Вставим следующую запись:

[spoiler]

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName auto.dev
DocumentRoot /home/gansik/www/auto.dev
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/gansik/www/auto.dev>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory «/usr/lib/cgi-bin»>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ «/usr/share/doc/»
<Directory «/usr/share/doc/»>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

[/spoiler]

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

ServerAdmin webmaster@localhost — почта админа

ServerName auto.dev — название сервера

DocumentRoot /home/gansik/www/auto.dev — путь к папке с сайтом для удобства я размещаю его в домашней директории

<Directory /home/gansik/www/auto.dev>  — путь к папке с сайтом.

AllowOverride All — включаем возможность использование .htaccess

Далее включаем наш сайт

sudo a2ensite auto.dev

Вместо auto.dev — домен вашего сайта.

Перезагрузим апач.

sudo service apache2 reload

В корневой директории сайта создайте файл index.php c содержанием:

<?php

phpinfo();

?>

Откройте ваш сайт в браузере. Вы должны увидеть информацию о текущем статусе php. Если вы эту надпись увидели — поздравляем. Все прошло отлично. И теперь вы полноценно можете заниматься разработкой веб-приложений:)

Дополнительная информация.

Меняем пользователя от которого работает апач.

sudo nano /etc/apache2/envvars

Найдите строки:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Изменяем www-data на тот который нужен

 

Дальнейшие все настройки каждый делает уже под себя, в статье показана минимальная настройка.

LAMP. Отправка почты функцией PHP mail().

Если после установки например LAMP сервера у вас не работают скрипты с функцией php mail(), точней письма просто не отправляются, то это значит что вам нужно установить почтовый сервер, например Postfix. Но Postfix — это огромный с кучей возможностей почтовый сервер, и мне он был не к чему. Мне нужно было лишь заставить работать функцию mail(), точней просто отправлять письма с сервера, например при регистрации, или заказе товара в интернет-магазине, и т.д. Поискав информацию, я нашел очень хороший, минимальный MTA, для таких целей. Таким оказался — SSMTP. Нету не чего лишнего, прост в установке, и настройке. Давайте установим и настроем ssmtp для отправки писем, например через gmail.

Для установки SSMTP выполните в терминале:

sudo apt-get install ssmtp

Отредактируем файл-конфигурации:

sudo gedit /etc/ssmtp/ssmtp.conf

Добавим туда следующие строчки, заменяя их на свои данные:

root=youremailhere@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=yourgmailusername
AuthPass=yourgmailpassword
UseSTARTTLS=YES

По-сути, по таком же примеру можно настроить почту и под любого другого сервиса почты.

Есть еще и другой способ, ниже я приведу пример настроек для yandex.ru

sudo gedit /etc/ssmtp/revaliases

Пишем следующие строчки, и не забываем их изменить под свои данные

root:pupkin@yandex.ru:smtp.yandex.ru:465
UserUbuntu:pupkin@yandex.ru:smtp.yandex.ru:465
www-data:pupkin@yandex.ru:smtp.yandex.ru:465

Сохраняем и закрываем.

Редактируем конфиг:

sudo gedit /etc/ssmtp/ssmtp.conf

И все содержимое заменяем следующим:

hostname=localhost
FromLineOverride=NO
AuthUser=pupkin@yandex.ru
AuthPass=12345
mailhub=smtp.yandex.ru:465
UseTLS=YES

Подставляем свои данные, сохраняем, и закрываем.

Далее откроем php.ini и отредактируем его:

sudo gedit /etc/php5/apache2/php.ini

находим параметр: sendmail_path, раскоментируем его и добавляем путь к ssmtp:

sendmail_path = /usr/sbin/ssmtp -t

Сохраняем изменения и перезагружаем апач:

sudo /etc/init.d/apache2 restart

Sendmail

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

Установим  sendmail

sudo apt-get install sendmail

отредактируем php.ini И дадим знать для php, что  мы будем отправлять почту, через sendmail

sudo gedit /etc/php5/apache2/php.ini

в параметре sendmail_path пропишем следующее:

sendmail_path = /usr/sbin/sendmail -t

Перезагрузим веб-сервер

sudo /etc/init.d/apache2 restart

Пост обновлен! 28.12.2011