stream_context_set_params不适用于ssh2.sftp包装器

时间:2013-02-12 11:36:15

标签: php sftp libssh2

我想使用here之类的功能。请检查以下代码

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);

它工作正常! notify函数被多次调用。 我尝试使用像这样的sftp包装

$data = file_get_contents("ssh2.sftp://username:password@host:port/path/to/big/file",
            false, $ctx);

它也不行。 有什么想法吗?

2 个答案:

答案 0 :(得分:2)

ssh2扩展名不支持notfication回调。我不知道这是设计还是没有实现,但扩展代码缺少对以下函数的调用:

From(PHP-5.4.10)/ext/standard/ftp_fopen_wrapper.c,第573行:

php_stream_notify_progress_init(context, 0, file_size);

解决方法,我尚未测试过,可能是使用ftps://(FTP over ssl)。它应该符合您的安全需求,并且 - 如代码所示 - 将支持通知为ftp。详细地说,它使用与ftp相同的urlwrapper。

答案 1 :(得分:1)