В хостинге некоторые решения могут показаться вам нестандартными.
Поэтому перед началом работы мы бы рекомендовали ознакомиться с вводной статьей.
1. Как работать с настройками PHP
2. Как запускается PHP на хостинге
3. Работа с MySQL
4. Работа с Redis
5. Работа с Memcached
6. Работа с npm
7. Работа с Python
Для вашего удобства по умолчанию уже включены большинство необходимых для работы PHP модулей, поэтому обычно настройки PHP редактировать не требуется.
Если же есть необходимость изменить настройки PHP, то:
Пример настроек PHP для сайта mydomain.com в контейнере u37663
:
На хостинге для запуска PHP мы используем 3 компонента:
Nginx
, Apache
, FastCGI
. Рассмотрим каждый из них.
Обрабатывает входящие подключения, отдает статические файлы. Перенаправляет запросы в apache.
Мы используем Apache для совместимости с сайтами, которые полагаются на инструкции в файлах .htaccess.
Поэтому все инструкции в .htaccess обрабатываются стандартным образом.
При создании контейнера можно выбрать, использовать ли современное окружение или старое окружение.
В современном окружении доступны версии PHP от 5.6 до 8.2.
В старом окружении доступны версии PHP от 5.2 до 7.3.
В обоих случаях обработкой PHP занимается FastCGI.
У каждого сайта свой индивидуальный Apache.
MySQL доступен только через сокет /run/mysqld/mysqld.sock
и недоступен по сети.
Пример подключения к MySQL в PHP при помощи расширения mysqli.
<?php
$servername = "localhost";
$username = "c566_wp_c2_u37663_netangels_ru";
$password = "HeKriDapsonag31";
// Create connection
$conn = mysqli_connect($servername, $username, $password);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
Сохраним этот код в файл mysql.php и разместим в каталоге с сайтом.
Если после открытия этого скрипта в браузере появляется сообщение Connected successfully
, то
подключение к MySQL прошло успешно.
На хостинге в Redis данные хранятся только в оперативной памяти и на диск не сохраняются. Из оперативной памяти данные очищаются при перезапуске сервиса, либо пока вы специально не удалите данные.
Пример подключения к Redis из PHP:
<?php
//Connecting to Redis server on localhost
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo "Connection to server was sucessfull";
//check whether server is running or not
echo "<br>Server is running: ".$redis->ping();
?>
Сохраним этот код в файл redis.php и разместим в каталоге с сайтом.
Подключение к Redis прошло успешно, если после открытия скрипта в браузере появляется сообщение
Connection to server was sucessfull
Server is running: +PONG
Пример подключения к Memcached и сохранения данных на 300 секунд.
<?php
$memcache_obj = memcache_connect('localhost', 11211);
memcache_set($memcache_obj, 'SC1_Terran_Ground_Units', 'SCV, Marine, Firebat, Medic, Ghost, Vulture, Siege Tank, Goliath', 0, 300);
echo memcache_get($memcache_obj, 'SC1_Terran_Ground_Units');
?>
Сохраним этот код в файл mem.php и разместим в каталоге с сайтом.
Подключение к Memcached прошло успешно, если после открытия скрипта в браузере появляется сообщение
SCV, Marine, Firebat, Medic, Ghost, Vulture, Siege Tank, Goliath
В данном разделе описывается работа сайтов на PHP c npm. Если вы планируете разместить проект на Node.js, пожалуйста, обратитесь к соответствующей статье.
По умолчанию npm и Node.js для сайтов на PHP недоступны, однако некоторым CMS (например, Bitrix или Laravel) иногда необходимы для работы модули, которые возможно установить только с помощью npm. Кроме того, данный способ может подойти, если требуется запустить фоновый процесс, но для такой задачи лучше будет всё же создать отдельный сайт на Node.js.
Для установки Node.js можно воспользоваться утилитой Node Version Manager, которая позволяет установить Node.js локально для контейнера. Подробная информация об NVM доступна на странице проекта в GitHub.
Сама установка выполняется достаточно просто.
c40057@h25:~$ cd sitename.ru/
(php 7.3)c40057@h25:~/sitename.ru$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
(php 7.3)c40057@h25:~/sitename.ru$ source ../.bashrc
(php 7.3)c40057@h25:~/sitename.ru$ nvm install node
Сразу же после можно приступать к установке модулей.
(php 7.3)c40057@h25:~/sitename.ru$ npm install express
В каталоге сайта появится папка node_modules, куда модули и будут установлены.
Если вас интересует определённая версия Node.js, то можно выполнить команду, которая покажет доступные для установки версии.
nvm ls-remote
И далее установить нужную версию, например,
nvm install v20.11
Если вы пользуетесь архивной услугой виртуального хостина или старым окружением актуальной услуги, где версии PHP выше 7.3 недоступны. Тогда стоит рассматривать версии Node.js не выше 11.х.х. Более новые установить не получится.
Поскольку у каждого сайта на хостинге настроено собственное окружение, то при повторной авторизации в контейнер после входа в каталог сайта может потребоваться вновь активировать установленную версию Node.js вот так
nvm use v20.11
Увидеть список установленных версий можно с помощью
nvm ls
В данном разделе описывается работа сайтов на PHP c Python. Если вы планируете разместить проект на Python, пожалуйста, обратитесь к соответствующей статье.
По умолчанию Python и pip для сайтов на PHP недоступны, однако некоторым иногда бывает удобно запускать какие-то скрипты сайта или cron-задачи через Python. Кроме того, данный способ может подойти, если требуется запустить фоновый процесс, но для такой задачи лучше будет всё же создать отдельный сайт на Python.
Все актуальные версии Python уже установлены на серверах услуги Хостинг с современным окружением, нужно только создать виртуальное окружение для нужной версии Python внутри контейнера.
Создание виртуального окружения выполняется достаточно просто. Версию Python 3.12 из примера можно заменить на нужную вам. С версией Python 2.7 данный метод работать не будет.
c40057@h25:~$ cd sitename.ru/
(php 7.3)c40057@h25:~/sitename.ru$ python3.12 -m venv ./.env-python3.12
(php 7.3)c40057@h25:~/sitename.ru$ source ./.env-python3.12/bin/activate
Сразу же после можно приступать к установке модулей.
(.env-python3.12) (php 7.3)c40057@h25:~/sitename.ru$ pip install Pillow
Модули будут установлены в каталог виртуального окружения .env-python3.12.
Чтобы вебсервер мог обнаружить виртуальное окружение Python, нужно изменить переменную PATH и добавить переменную VIRTUAL_ENV в настройках сайта (Хостинг - Контейнер c40057 - sitename.ru - PHP - Переменные окружения).
PATH=/home/c40057/sitename.ru/.env-python3.12/bin:/home/c40057/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin
VIRTUAL_ENV=/home/c40057/sitename.ru/.env-python3.12
Для безопасности добавим в файл .htaccess в корневом каталоге сайта ~/sitename.ru/www/ правило, запрещающее прямой доступ к файлам Python
<FilesMatch "\.(?:py)$">
Order allow,deny
Deny from all
</FilesMatch>
Если нужно будет изменить версию Python, то потребуется выполнить процедуру создания окружения и установки модулей для новой версии заново.
Если вы пользуетесь архивной услугой виртуального хостина или старым окружением актуальной услуги, то создать использовать Python вышеописанным способом не получится.
Поскольку у каждого сайта на хостинге настроено собственное окружение, то при повторной авторизации в контейнер после входа в каталог сайта потребуется вновь активировать виртуальное окружение Python вот так
(php 7.3)c40057@h25:~/sitename.ru$ source ./.env-python3.12/bin/activate
Увидеть список установленных на сервере версий python можно в каталоге /usr/bin
ls -al /usr/bin | grep python3
Для примера, создадим в корневом каталоге сайта ~/sitename.ru/www файл hello.php со следующим содержимым:
<?php
$command = escapeshellcmd($_SERVER['DOCUMENT_ROOT'] . '/' . 'hello.py');
$output = shell_exec($command);
echo $output;
?>
Далее создадим в том же каталоге файл hello.py со следующим содержимым:
#!/usr/bin/env python
print("Hello, World!")
Сделаем файл hello.py исполняемым
chmod +x hello.py
Теперь при открытии страницы http://sitename.ru/hello.php мы будем видеть сообщение “Hello, World!”