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

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

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

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

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

Примечание: В версиях 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.

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

Например:

$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() может иметь необязательный третий аргумент, который определяет, какого рода информацию о результатах выполнения утилиты надо получить.