快使用php,使用PHP快速通过网络传输大量小文件-程序员宅基地

技术标签: 快使用php  

通过SSH隧道使用gzip压缩包很快.比纯scp更快的速度,特别是对于许多小文件.以下是linux命令行的示例:

user@local# cd /source/ ; tar czf – * | ssh user@remote “cd /target/ ; tar xzf -“

更新:根据要求,这里你使用一个纯PHP解决方案 – 有一些乐趣摆弄这个棘手的位.

注意:您需要PHPs libssh extension才能工作.此外,STDIN似乎仅在使用SSH的流包装器时可用.

这几乎没有开销,因为它直接在流上运行,并且您的CPU很可能总是比您用于传输的网络链接更快.

要交换网络与CPU速度,可以从命令行中删除选项-z. (CPU使用率更低,但线路上的数据更多)

代码示例:

$local_cmd = "cd /tmp/source && tar -czf - *";

$remote_cmd = "tar -C /tmp/target -xzf -";

$ssh = new SSH_Connection('localhost');

$auth = $ssh->auth_password('gast', 'gast');

$bytes = $ssh->command_pipe($local_cmd, $remote_cmd);

echo "finished: $bytes bytes of data transfered\n";

class SSH_Connection {

private $link;

private $auth;

function __construct ($host, $port=22) {

$this->link = @ssh2_connect('localhost', 22);

}

function auth_password ($username, $password) {

if (!is_resource($this->link))

return false;

$this->auth = @ssh2_auth_password($this->link, $username, $password);

return $this->auth;

}

function command_pipe ($localcmd, $remotecmd) {

if (!is_resource($this->link) || !$this->auth)

return false;

// open remote command stream (STDIN)

$remote_stream = fopen("ssh2.exec://{$this->link}/$remotecmd", 'rw');

if (!is_resource($remote_stream))

return false;

// open local command stream (STDOUT)

$local_stream = popen($localcmd, 'r');

if (!is_resource($local_stream))

return false;

// connect both, pipe data from local to remote

$bytes = 0;

while (!feof($local_stream))

$bytes += fwrite($remote_stream,fread($local_stream,8192));

// close streams

fclose($local_stream);

fclose($remote_stream);

return $bytes;

}

function is_connected () { return is_resource($this->link); }

function is_authenticated () { return $this->auth; }

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30376627/article/details/116369172

智能推荐

Servlet详解-程序员宅基地

文章浏览阅读321次。Servlet (Server Applet),全称Java Servlet。是用Java编写的服务器端程序,其,生成动态的Web内容。Servlet运行于支持Java的应用服务器中(如Tomcat等)。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下,servlet只用来扩展基于HTTP协议的服务器。

VMware与艾莫讯国产300编程电缆兼容性问题_虚拟机插入mpi电缆卡死-程序员宅基地

文章浏览阅读1.3k次。VMware-15.1.0 -VMware-15.5.5之间所有的版本都与国产艾莫讯0CB20电缆有兼容问题。 具体故障是只要连接到虚拟机并驱动就会造成虚拟机死机。西门子官方的0CB20电缆不会存在这个问题。说明国产电缆和官方电缆的实现方式还是有区别,这次蓝屏死机BUG主要是由VMware引起的,为了验证我还特意去咸鱼上整了一条官方电缆。 我为什么知道这么清楚呢,因为vmware每一次更新我都会去升级,然后去现场干活。接下来的事情你们应该能想到了,去现场都读程序,结果插上电缆就死机。急忙跟客户说.._虚拟机插入mpi电缆卡死

java找不到符号解决办法-程序员宅基地

文章浏览阅读1.6w次,点赞11次,收藏15次。一、java找不到符号如果你的代码里没有报错,明明是存在的。但是java报错找不到符号。像下面这样子。二、解决步骤1.清除编码工具缓存本人用的idea, eclipse清除缓存方式有需要的可以百度一下!2.如果是mavne项目的先clean 再package总结提示:一定要package本人刚开始就是知道clean了,没有package导致问题一直没有解决。在此记录一下!...

【Nginx】配置详解_nginx修改配置文件如何生效-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏22次。访问到未定义的扩展名的时候,就默认为下载该文件。#服务器并发处理能力,值越大并发能力越强(受自身配置限制)一个http块可以包含多个server块,而一个server块就等于一个虚拟主机。nginx配置最频繁的部分,比如代理,日志,缓存、第三方模块等等。包括文件引入、MIME-TYPE定义,日志自定义、连接超时等等。需要注意的是http块可以包括http全局块和server块。server块又包含全局server块和location块。二、容器部署的项目,配置nginx。2.2,events块。..._nginx修改配置文件如何生效

Unity核心9——3D动画_unity动画-程序员宅基地

文章浏览阅读6.3k次,点赞7次,收藏30次。Has Exit Time:是否有退出时间,如果勾选,当切换动画时,动画一定是播放到下方的 Exit Time(百分比)的时间时才过渡到下一个动画。​ 我们是否可以这样做,比如开枪动画只影响上半身,下半身根据实际情况播放站立,跑动,蹲下动作,通过上下半身播放不同的动画就可以达到动画的组合播放。不同的是有一个上层的图标(Up Base Layer),通过连接该状态来转移到上层状态机的某个状态。主要用于直接从另一个层复制状态过来,在该层中进行修改,另一个层的设置信息都将保留,我们只需要替换状态对应的动画即可。_unity动画

vue-cli(vue脚手架)安装 详细教程_vue脚手架安装步骤-程序员宅基地

文章浏览阅读2.4w次,点赞30次,收藏204次。vue-cli这个构建工具大大降低了webpack的使用难度,支持热更新,有webpack-dev-server的支持,相当于启动了一个请求服务器,给你搭建了一个测试环境,只关注开发就OK。一.安装vue-cli1、 使用npm(需要安装node环境)全局安装webpack,打开命令行工具输入:npm install webpack -g或者(npm install -g webpack),安装完成之后输入 webpack -v,如下图,如果出现相应的版本号,则说明安装成功。注意:webpack 4._vue脚手架安装步骤

随便推点

牛人莫入 Silverlight DataGrid 分组技巧 -程序员宅基地

文章浏览阅读983次。牛人莫入 Silverlight DataGrid 分组技巧 最近在项目中很多的地方都用到了数据的展示---DataGrid控件,在园子里面也有很多的朋友也对这个DataGrid控件也写了很多的教程;我这里也与其它人也没有什么区别,这里只是告诉大家一个小的技巧;但是我相信这一个小的技巧对大家以后在项目中应该有一些帮助;一天,领导走过来看了我用户管理UI,我用了一

U-net网络_sr3 的u-net-程序员宅基地

文章浏览阅读1.8w次,点赞14次,收藏89次。 U-net网络是一个典型的端到端的网络结构。如下图所示: 基本的网络结构并不复杂,但是代码实现过程中需要进行调试,但这会花费很大的时间。本文旨在为初学者介绍代码的快速使用方法,直接将U-net网络作为黑盒使用。如果您觉得对您有用,请点个赞,欢迎交流。一:从github上下载改进的U-net源码:点击打开传送门显示如下:二:点击Clone or download,下载..._sr3 的u-net

【Linux】P3 用户与用户组_创建一个名为‘test_user2’的用户,并将 test_user 用户所拥有的权限传 给 tes-程序员宅基地

文章浏览阅读449次。Linux中,怎样初始化超级管理员 root,如何切换超级管理员;怎样创建用户,删除用户,更改用户所在组;怎样创建用户组,怎样删除用户组。_创建一个名为‘test_user2’的用户,并将 test_user 用户所拥有的权限传 给 test_u

poj2142 The Balance(扩展欧几里得算法)_ms. iyo kiffa-australis has a balance and only two-程序员宅基地

文章浏览阅读1.7w次。The BalanceTime Limit: 5000MS Memory Limit: 65536KTotal Submissions: 6423 Accepted: 2832DescriptionMs. Iyo Kiffa-Australis has a balance and only two kinds of wei_ms. iyo kiffa-australis has a balance and only two kinds of weights to measu

假如程序员进军 UI 界?-程序员宅基地

文章浏览阅读155次。点击????方“逆锋起笔”,公众号回复视频教程领取大佬们推荐的学习资料著名的社交新闻站Reddit,在#ProgrammerHumor#的标签下(程序员的幽默)举办了一个“最糟糕音量键设计大赛”,提交的作品简直是震!惊!UI!界!并且其中大部分设计,已经被code了出来,来感受一下吧。➀通过摇骰子得到音量数字才能得到合适的音量▽调音量变成了开奖一样还有这种操作!?➁通过平衡调..._程序员转行ui

MISC:压缩包隐写的破解方法._ctf misc 反复zip包压缩100次-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏25次。Misc即杂项,是信息隐藏又称信息伪装,就是通过减少载体的某种冗余,如空间冗余、数据冗余等,来隐藏敏感信息,达到某种特殊的目的。信息隐藏打破了传统密码学的思维范畴,从一个全新的视角审视信息安全。与传统的加密相比,信息隐藏的隐蔽性更强,在信息隐藏中,可以把这两项技术结合起来,先将秘密信息进行加密预处理,然后再进行信息隐藏,则秘密信息的保密性和不可觉察性的效果更佳。_ctf misc 反复zip包压缩100次

推荐文章

热门文章

相关标签