
Запросы серверу через php
При разработке иногда возникает необходимость исполнить такие действия/комманды, для которых недостаточно прав или отсутствует доступ к некоторым директориям у пользователя, из-под которого запущен на сервере и исполняетя Друпал. Выход из данной ситуации - библиотека libssh2, которая обеспечивает доступ к ресурсам (shell) отдалённого сервера, используя зашифрованное соединение.
Shell - (от англ. оболочка) - это интерпретатор команд операционной системы.
Для использования shell команд в php, необходимо знать: порт, хост, имя пользователя, пароль. Для соединения с сервером используется функция ssh2_connect, для авторизации пользователя - ssh2_auth_password.
<?php
$port = 2002;
$server = 'example.com';
$login = 'user@example.com';
$pass = '12345';
if (!function_exists("ssh2_connect")) {
exit("ssh2_connect disable");
}
if(!($con = ssh2_connect($server, $port))){
//переменный $con в случае успешного соединения
//присваивается ссылка идентификатора SSH з’соединения,
//необходимое позже для вызова функции ssh2_auth_password,
//при неудачном соединении присваеваится значение FALSE.
exit("could not connect to {$server} with port {$port}");
}
if(!ssh2_auth_password($con, $login, $pass)) {
exit("login/password is incorrect");
}
?>А также существуют следующие пути авторизации:
- ssh2_auth_hostbased_file - авторизация с использованием публичного HOSTKEY;
- ssh2_auth_none - авторизация методом "none", который обычно недоступен;
- ssh2_auth_pubkey_file - авторизация с использованием публичного ключа.
Например, после восстановления соединениястановятся доступными такие sftp функции:
- ssh2_sftp_mkdir - создание директорий;
- ssh2_sftp_rename - переименование отдалённых файлов;
- ssh2_sftp_rmdir - удаление директорий;
- ssh2_sftp_unlink - удаление файлов;
- ssh2_sftp - Инициализация подсистемы SFTP с уже подключенным сервером SSH2;
- ssh2_sftp_realpath - превращает имя файла в реальный эффективный путь на отдалённой файловой системе.
И это далеко не весь список.
<?php
$sftp = ssh2_sftp($con);
ssh2_sftp_mkdir($sftp, '/new_directory');
ssh2_sftp_rmdir($sftp, '/old_directory');
?>Наиболее функциональной является ssh2_exec функция, которая даёт возможность выполнять доступные на сервере shell команды для данного пользователя.
<?php
if (!(ssh2_exec($con, "rm {$file}" ))) {
exit("remove file failed");
}
if (!(ssh2_exec($con, "cp {$path_from} {$path_to}" ))) {
exit("file copy failed");
}
?>То есть данная библиотека позволяет использовать shell команды в php коде, что значительно расштряет возможности для разработки.

