Версия PHP-CLI по умолчанию для управляемых серверов Zone (виртуальные серверы, приватные серверы) имеет ту же версию PHP, что и основной хост.
Вы можете проверить текущую версию, выполнив в консоли следующую команду:
php -v
В результате получается следующий ответ:
virt1234:sn-69-1.tll07.zoneas.eu:~> php -v PHP 8.3.7 (cli) (built: May 23 2024 08:53:27) (NTS) Copyright (c) The PHP Group Zend Engine v4.3.7, Copyright (c) Zend Technologies with Zend OPcache v8.3.7, Copyright (c), by Zend Technologies
Использование других версий.
Изменение версии PHP главного домена веб-хостинга также изменит версию консоли по умолчанию. Изменить версию PHP можно в Мой Zone
через управление веб-хостингом в разделе управления веб-сервером.
Чтобы изменить версию PHP, используемую только в консоли, необходимо создать симлинк для комманды php
для команды php в каталоге ~/bin
, которая указывает на файл PHP CLI с нужной версией, или использовать команду PHP CLI, имя которой уже содержит соответствующую версию PHP.
Постоянный симлинк php
Если вы хотите использовать PHP CLI версии 8.2, вам необходимо выполнить эту команду:
> mkdir -p ~/bin && ln -sf /usr/bin/php82-cli ~/bin/php
Если вы хотите использовать PHP CLI 7.4 или любую другую версию, вы должны использовать номер версии без точки в команде для файла php-cli:
> mkdir -p ~/bin && ln -sf /usr/bin/php74-cli ~/bin/php
После добавления симлинка нужно выйти из системы и снова войти, после чего команда php -v
покажет измененную версию.
PS! Если вы сделаете этот симлинк, версия PHP CLI больше не будет меняться автоматически.
Чтобы вернуться к версии PHP CLI по умолчанию, симлинк необходимо удалить с помощью следующей команды:
> rm -f ~/bin/php
Команды CLI для разных версий PHP
Для каждой версии PHP CLI существуют отдельные команды, которые можно использовать в качестве альтернативы команде php
. Например:
> php83-cli -v PHP 8.3.7 (cli) (built: May 23 2024 08:53:27) (NTS) Copyright (c) The PHP Group Zend Engine v4.3.7, Copyright (c) Zend Technologies with Zend OPcache v8.3.7, Copyright (c), by Zend Technologies
Если вы хотите использовать PHP CLI 7.4 или другую версию, вы должны использовать номер версии без точки в команде.
Какую версию бинарных файлов PHP CLI вы используете, можно проверить с помощью команды:
> l /usr/bin/php*-cli
Загрузка необходимого файла php.ini
Поскольку по умолчанию для PHP CLI используется та же версия, что и для главного домена PHP, конфигурационный файл php.ini для головного домена PHP также загружается для PHP CLI.
Если для PHP CLI используется другая версия PHP, будет по-прежнему использоваться конфигурационный файл php.ini с версией PHP главного домена.
Для того чтобы PHP CLI использовал файл php.ini нужной версии или любой другой файл php.ini, необходимо использовать переменную PHPRC
, которая является путем к нужному файлу php.ini.
Это может быть php.ini PHP CLI хостингового сервера, php.ini (под)домена, глобальный php.ini или совершенно отдельный php.ini файл:
> PHPRC=/etc/php/cli-php8.2/php.ini > PHPRC=/data01/virt1234/domeenid/www.example.com/phpini/https/sub.example.com/php.ini > PHPRC=/data01/virt1234/domeenid/www.example.com/phpini/global/php.ini > PHPRC=/data01/virt1234/domeenid/www.example.com/custom.ini
Или используйте переменную окружения PHPRC
в той же команде, соединив две команды вместе:
> PHPRC=/etc/php/cli-php8.2/php.ini && wp cli info
Чтобы использовать другие версии, необходимо изменить номер версии в строке файла php.ini.
Если вам нужно добавить или перезаписать некоторые настройки или директивы PHP в дополнение к основному файлу php.ini, вы можете использовать переменную окружения PHP_INI_SCAN_DIR
для загрузки отдельного php.ini и установить ее в путь к директории, в которой находится нужный файл php.ini:
> PHP_INI_SCAN_DIR=/path/to/dir
И наоборот, например, если есть глобальный файл php.ini, который не нужно загружать, PHP_INI_SCAN_DIR
следует установить пустым:
> PHP_INI_SCAN_DIR=
Постоянная настройка
При выполнении предыдущих команд, определяющих загруженные файлы php.ini, переменные окружения PHPRC
и PHP_INI_SCAN_DIR
остаются действительными только на время сеанса SSH.
Если необходимо, чтобы PHP CLI постоянно использовал необходимый файл php.ini, эти переменные окружения должны быть добавлены в файл ~/.bashrc
.
Файл ~/.bashrc
автоматически загружается в начале каждого сеанса SSH, и в него также загружаются содержащиеся в нем переменные окружения.
В предыдущих примерах команд добавьте PHPRC
и PHP_INI_SCAN_DIR
в ~/.bashrc
и перезагрузите его:
> echo 'PHPRC=/etc/php/cli-php8.2/php.ini' >> ~/.bashrc && source ~/.bashrc > echo 'PHP_INI_SCAN_DIR=/path/to/dir' >> ~/.bashrc && source ~/.bashrc
Строки переменных окружения PHPRC
и PHP_INI_SCAN_DIR
могут быть удалены из файла ~/.bashrc
следующими командами:
> sed -i '/^PHPRC=/d' ~/.bashrc > sed -i '/^PHP_INI_SCAN_DIR=/d' ~/.bashrc
Самые распространенные ошибки
Если в консоли отображается сообщение об ошибке, связанной с PHP CLI или php.ini, необходимо проверить, не вызвана ли эта ошибка разницей между версиями PHP CLI и загруженного php.ini.
Кроме того, ошибка может быть вызвана загруженным глобальным php.ini, если он предназначен для более старой версии PHP или если настройки в нем вызывают конфликты.
Если между версиями PHP CLI и загруженного php.ini есть существенная разница, это может помешать использованию PHP CLI в консоли, поскольку в файле php.ini может быть указано на загрузку расширения, которое не существует для версии PHP CLI.
Например, распространенным сообщением об ошибке в консоли в таких случаях является:
Warning: PHP Startup: Unable to load dynamic library 'php_xmlrpc.so'.
Используется ли симлинк для команды php
или нет, можно проверить с помощью следующей команды. На использование симлинка указывает тип иноде l
(ссылка) и форма симлинка /data01/virt1234/bin/php
.
> l $(whereis php)
Какова версия и какие файлы php.ini загружены для PHP CLI, можно проверить с помощью следующей команды:
> php -v | head -1 && php --ini | grep -iE 'Configuration File|Additional'
Чтобы использовать файл конфигурации php.ini с нужной версией для PHP CLI в консоли, необходимо использовать переменную окружения PHPRC (PHP Runtime Configuration).