# Интерфейс командной строки

Некоторые расширения могут использовать утилиты командной строки, которые Plesk предоставляет администраторам, как альтернативу выполнения операций в графическом интерфейсе. Интерфейс командной строки (Command-Line Interface, CLI) предоставляет те же функции, что и XML API, но результат выполнения той или иной операции выдается в виде простого текста, а не дерева XML. Более подробную информацию об утилитах командной строки смотрите в следующих документах:

- Справочник по командной строке, Plesk для Linux
- Справочник по командной строке, Plesk для Microsoft Windows

Для выполнения вызова CLI используйте класс pm_ApiCli.

# Выполнение утилит

Вызов командной строки выполняется с помощью метода:

- call()

Его первый аргумент – имя утилиты, а второй – массив опций и их значений. Третий необязательный аргумент указывает, какого рода информацию о результатах выполнения утилиты надо получить.

Примечание

В версиях Plesk 12.5 и ниже вызов `pm_ApiCli::call` может быть запущен только через скрипты командной строки и не может быть запущен через операции в интерфейсе Plesk.

## Например: Получение информации о лицензионном ключе

Следующий пример позволяет получить информацию о текущем лицензионном ключе Plesk:

    $result = pm_ApiCli::call('keyinfo', ['-l']);
    var_dump($result);

Вывод должен выглядеть примерно так:

    array(3) {
        ["code"] =>
            int(0)

        ["stdout"] =>
            string(447) "plesk_key_id: 0
            license_update_date: 20350101
            lim_date: 20120501
            lim_cl: -1
            ...
            "

        ["stderr"] =>
            string(0) ""
    }

В более сложных ситуациях разделите вызов по аргументам и добавьте каждый аргумент как элемент массива. Например:

    customer --create johnusername -name "John Doe" -passwd sample -country US -notify false

должен быть преобразован к:

    pm_ApiCli::call('customer', ['--create', 'johnusername', '-name', 'John Doe', '-passwd', 'sample', '-country', 'US', '-notify', 'false']);

## Например: Обработка результатов выполнения утилиты

Можно указать, какая именно информация о выполнении утилиты должна быть получена с помощью вызова. Для этого укажите тип возвращенного значения в последнем аргументе метода `call()`, например:

    $result = pm_ApiCli::call('license', ['--check-installed-license'], pm_ApiCli::RESULT_CODE);

В этом примере переменной `$result` будет присвоен код ошибки, созданный в результате выполнения утилиты „license“ с параметром „`--check-installed-license`“, который равен ‘0’, если установленный код лицензии является корректным, и ‘1’ – в противном случае.

Все доступные типы возвращаемых значений описаны здесь: pm_ApiCli Constants.

Примечание

Если не указано ни одного возвращаемого значения, будет возвращено значение по умолчанию `RESULT_EXCEPTION`. До Plesk 17 по умолчанию возвращалось значение `RESULT_FULL`. Возможно, потребуется отразить это изменение в расширениях, одновременно поддерживающих как версии Plesk 12.5 и выше, так и версии Plesk 17 и выше.

Если в результате выполнения утилиты возвращается код ошибки ‘0’, при использовании `RESULT_EXCEPTION` будет возвращен тот же массив значений, что и при использовании `RESULT_FULL` (code, stdout, stderr). Но если результирующий код ошибки не равен ‘0’, использование `RESULT_EXCEPTION` приводит к выдаче исключения (pm_Exception_ResultException).

# Выполнение привилегированных утилит

Папка `/<product-root>/admin/bin/` содержит утилиты, которые запускаются с более высоким уровнем привилегий. Кроме того, в самом расширении могут быть использованы некоторые утилиты, которые должны запускаться с более высоким уровнем привилегий. Такие утилиты помещаются в папку `/<product-root>/admin/bin/modules/$MODULE_NAME`.

Примечание

В версиях Plesk 12.5 и выше привилегированные утилиты доступны только в Plesk для Linux.

Вы можете запускать такие утилиты с помощью следующего метода:

- callSbin()

Например:

    $result = pm_ApiCli::callSbin('my-utility');
    var_dump($result);

По умолчанию метод будет искать утилиту `my-utility` в папке `/<product-root>/admin/bin/modules/$MODULE_NAME`. Если утилита там не найдена, метод будет искать ее в папке `/usr/local/psa/admin/bin/`.

Примечание

Так же как и `call()`, `callSbin()` может иметь необязательный третий аргумент, который определяет, какого рода информацию о результатах выполнения утилиты надо получить.