параметры набора контекста потока не работают с оболочкой ssh2.sftp
Я хочу использовать такие функции, как здесь . Пожалуйста, проверьте код ниже
function notify (
$notification_code,
$severity,
$message,
$message_code,
$bytes_transferred,
$bytes_max
) {
echo "Runned \n";
};
$ctx = stream_context_create();
stream_set_params($ctx, array('notification' => 'notify'));
$ssh_connection = ssh2_connect('myhost');
ssh2_auth_password($ssh_connection, 'login','pass');
$sftp_resource = ssh2_sftp($ssh_connection);
$data = file_get_contents("ssh2.sftp://{$sftp_resource}/path/to/big/file",
false, $ctx);
Я ожидаю, что моя функция уведомления будет вызвана по крайней мере один раз. На самом деле, тот же код работает для ftp-оболочек
function notify (
$notification_code,
$severity,
$message,
$message_code,
$bytes_transferred,
$bytes_max
) {
echo "Runned \n";
};
$ctx = stream_context_create();
stream_set_params($ctx, array('notification' => 'notify'));
$scheme = 'ftp';
$data = file_get_contents("{scheme}://username:password@host:port/path/to/file",
false, $ctx);
И это прекрасно работает! Функция уведомления вызывается много раз. Я пытаюсь использовать оболочку sftp вот так
$data = file_get_contents("ssh2.sftp://username:password@host:port/path/to/big/file",
false, $ctx);
И это тоже не работает. Есть какие-нибудь идеи?
2 answers
Расширение ssh2 не поддерживает обратные вызовы notfication. Я не знаю, сделано ли это специально или просто не реализовано, но в коде расширений отсутствуют вызовы таких функций, как:
Из (PHP-5.4.10)/ext/standard/ftp_fopen_wrapper.c, строка 573:
php_stream_notify_progress_init(context, 0, file_size);
Обходной путь , который я еще не тестировал, может заключаться в использовании ftps://
(FTP через ssl). Он должен соответствовать вашим потребностям в области безопасности и - как выглядит код - будет поддерживать уведомления в виде ftp. В деталях он использует то же самое urlwrapper как ftp.
Похоже на недавнюю фиксацию чистой оболочки потока PHP SFTP phpseclib добавлена поддержка уведомлений:
Https://github.com/phpseclib/phpseclib/commit/a47c1c39809a18b870b3812ce9ab84c7bd55efdd