PHP - SSH2 SFTP下载与进展

Jim*_*mbo 7 php sftp libssh2

我觉得这值得一个问题,因为StackOverflow似乎没有足够的主题.

我想要SFTP,使用带有进度条的PHP

我喜欢进步吧.但是,这次我想做一些不同的事情.我想用PHP做以下事情,这个看起来比上一个难得多:

  • 通过SFTP执行下载(通过SSH?)
  • 为用户提供下载进度的可见指示
  • 启用暂停和继续下载

想想FileZilla,但是在浏览器中,用PHP构建.我不想破解Apache或添加任何Apache mod.


实际下载的选项

有很多的问题,在这里,这里,这里这里的基本SFTP下载.

这些文档记录了PHP的SSH2扩展(我目前正在使用它 - 你通过pecl安装)和替代的PHPSecLib,我没有使用,但可能会在以后查看.
我的界面允许轻松交换/输出 - 编码到界面而不是实现等 ...

这很好,但他们只是执行实际的下载,就是这样.

下载进度

PHP有一个非常有趣的回调叫stream_notification_callback,你可以在此处详细了解.

这看起来很棒,并且是一个有希望的步骤,直到有人查看PHP的源代码并发现,不幸的是,SSH2/SFTP 不允许与此集成.
感谢hek2mgl努力研究这个.

我的想法stream_notification_callback是每次检索数据时都会传递当前下载大小的通知; 因此,使用当前下载的金额和总文件大小提供计算百分比所需的数据.但这不适用于SSH2和SFTP ......

暂停/继续怎么样?

在我看来,这将是最难完成的.将数据下载到临时文件是可能的......这就是我设法挖掘的内容:http://ee.php.net/manual/en/function.fread.php#84115 - 但是将这种代码与进度条似乎很疯狂.

最后

还有cURL,但是我没有看到通过SFTP暂停/恢复下载.如我错了请纠正我.

那么,我将如何使用PHP在浏览器中集成上述需求?忘记客户端的东西,只需将数据传输到浏览器就足够了,所以建议执行此操作会很棒.

小智 1

检查使用 PHP 下载大文件时服务器失败。可能会给你一些想法。

总结一下......答案之一建议修改 phpseclib 以在每次收到块时回显数据。另一个答案建议仅以块的形式下载并在下载时输出块。

看起来这非常符合您使用stream_notification_callback的想法。

祝你好运!