gpt4 book ai didi

php - stream_context_set_params 不适用于 ssh2.sftp 包装器

转载 作者:行者123 更新时间:2023-12-04 05:11:50 24 4
gpt4 key购买 nike

我想使用像 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);

它工作正常!通知函数被多次调用。
我尝试像这样使用 sftp 包装器
$data = file_get_contents("ssh2.sftp://username:password@host:port/path/to/big/file",
false, $ctx);

它也不起作用。
有什么想法吗?

最佳答案

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

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

php_stream_notify_progress_init(context, 0, file_size);

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

关于php - stream_context_set_params 不适用于 ssh2.sftp 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14831620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com