我认为这个问题很值得提出,因为StackOverflow上似乎没有足够的相关内容。
我想使用带有进度条的PHP进行SFTP传输
我喜欢进度条。但是,这次我想做一些不同的事情。我想要使用PHP做到以下几点,这看起来比上一次难得多:
- 通过SFTP(通过SSH?)执行下载
- 为用户提供可见的下载进度指示
- 启用暂停和继续下载
类似于FileZilla,但在浏览器中使用PHP构建。我不想攻击Apache或添加任何Apache模块。
实际下载的选项
这些文档涉及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在浏览器中整合上述要求?忘记客户端的东西,只要将数据传输到浏览器就足够了,所以建议执行此操作会很好。