快使用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

智能推荐

pythonplotting_Matplotlib: Python plotting-程序员宅基地

文章浏览阅读275次。IntroductionMatplotlib is a Python 2D plotting library which producespublication quality figures in a variety of hardcopy formats andinteractive environments across platforms. Matplotlib can be usedin..._python plotting

【ParaView教程】第三章 实战练习 —— 飞机外流场_paraview如何打开openfoam文件-程序员宅基地

文章浏览阅读3.5k次,点赞6次,收藏10次。从本章开始,分别介绍不同的实例,通过实战练习熟悉ParaView中的各种操作,达到进阶的目的。此实例来自对战斗机外流场的仿真,求解器为OpenFOAM。下面是一些好看的图片,除左下角外均由ParaView生成。 读入数据•数据文件如下所示。•使用ParaView打开文件功能..._paraview如何打开openfoam文件

Qt绘图与Matlab的实现方法_qt与matlab-程序员宅基地

文章浏览阅读278次,点赞3次,收藏4次。在本文中,我们将介绍如何使用Qt绘制图形,并通过类似Matlab的方式实现一些常见的图形操作。总结起来,Qt提供了丰富的绘图功能,可以用类似Matlab的方式实现各种图形操作。通过使用Qt的绘图功能,我们可以在自己的应用程序中快速实现各种图形展示需求。除了基本的绘制函数外,Qt还提供了许多其他有用的功能,例如设置画笔颜色、填充颜色、画笔宽度和字体样式等。通过这些基本的绘制函数,我们可以实现诸如绘制线段、矩形、圆形、文本和曲线等常见的图形操作。首先,我们需要设置一个Qt项目并导入必要的库文件。_qt与matlab

网页播放rtsp流媒体学习(包含可用rtsp地址)_流媒体能用网址-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏7次。1.下载FFmpeg:http://ffmpeg.org/download.html2.下载完直接解压好,并将bin目录加入到path环境变量下解压放置将下载的压缩包解压获得 ffmpeg-4.0.2-win64-static 文件夹,将 ffmpeg 文件夹放置到程序文件夹,假设放置路径为:D:\joyce_workspace打开环境变量设置页:资源管理器 > 此电脑 > 右键-属性 > 高级系统设置 > 环境变量双击 Path 项进入编辑页选择新建,将 路径D:_流媒体能用网址

【笔记整理】通信原理第二章复习——随机信号分析_随机信号分析第二章csdn-程序员宅基地

文章浏览阅读4k次,点赞4次,收藏37次。随机信号分析确知信号&随机信号确知信号:取值在任何时间都是确定的和可预知的信号,用函数描述随机信号:取值不确定且不能事先确切预知的信号,用概率和随机过程描述,用来描述随机过程确定性过程&随机过程确定性过程:变化过程具有确定的形式,或者说具有必然的变化规律;变化规律可以用一个或几个时间ttt的确定函数来描述随机过程:没有确定的变化形式,每次对它的测量结果没有一个确定的变化规律;变化过程不可能用一个或几个时间ttt的确定函数来描述2.1 确知信号确知信号:取值在_随机信号分析第二章csdn

总线通信的四种方式_总线通讯有几种-程序员宅基地

文章浏览阅读2w次,点赞13次,收藏62次。文章目录1、 同步通信2、异步通信3、半同步通信4、分离式通信1、 同步通信由统一时标控制数据传送(1)同步式数据输入(2)同步式数据输出2、异步通信采用应答方式,没有公共时钟标准3、半同步通信同步、异步结合同步:发送方用系统时钟前沿发信号接收方用系统时钟后沿判断、识别异步:允许不同速度的模块和谐工作 ____增加一条“等待”响应信号. WAIT以上三种通信的共同点:(1)主模块发地址、命令 占用总线(2)从模块准备数据 _总线通讯有几种

随便推点

LSTM多变量多步时间序列预测_lstm多变量时序预测预测新值-程序员宅基地

文章浏览阅读213次。在时间序列预测中,我们常常需要考虑多个相关变量的影响,并预测未来多个时间步的取值。本文将介绍如何使用LSTM实现多变量输入的多步时间序列预测,并提供相应的源代码。假设我们有多个相关变量作为输入特征,并且需要预测未来多个时间步的取值。通过以上步骤,我们可以使用LSTM模型实现多变量输入的多步时间序列预测。使用验证集对训练好的模型进行验证,评估模型的性能。训练集用于模型的训练,验证集用于调整模型的超参数,测试集用于评估模型的性能。将测试集输入到训练好的模型中,得到未来多个时间步的预测结果。_lstm多变量时序预测预测新值

配置文件、API接口脱敏_api脱敏-程序员宅基地

文章浏览阅读2.1k次。核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏。对于工程中的敏感信息,与数据库打交道的的工程肯定是配置数据源,尤其是数据库的账号密码,我们不想把它们明文写在配置文件里,又想让工程能正确跑起来,那应该怎么做呢?**由于数据库的敏感性,所以不可能让每个人都知道su ****root的密码。且数据库中权限、视图这些机制也是为了保证安全性,所以要保证让尽可能少的人知道root**的密码。在工程的配置文件中写入加密好的密文。启动工程时让知道密钥的人,以启动参数的形式将密钥。_api脱敏

EasyPoi 导出表格并设置表头_easypoi增加标头-程序员宅基地

文章浏览阅读7.5k次。EasyPoi 导出表格EasyPoiUtil 工具类设置表头 NewExcelExportStylerDefaultImpl 工具类VO实体类 对应的是表的列名Controller 1 未设置表头版本Controller 2 设置表头版本Service 查询导出Excel人员数据ServiceImplMapperMapper.xmlEasyPoiUtil 工具类package com.h..._easypoi增加标头

吉林建筑大学成人高考怎么报名-程序员宅基地

文章浏览阅读77次。吉林建筑大学是一所以工为主,‌‌以土木建筑为特色,理、工、文、管、法、艺、经等多学科相互支撑、协调发展的吉林省重点建设的普通高等学校是吉林省人民政府与住房和城乡建设部共建高校吉林建筑大学成人高考报名时间:1月5号报名—8月底结束报名,在这期间均可进行报名,建议考生在6月份之前完成报名,因为学校的招生名额有限制,早报考,早复习,早省心,如果等待8月底在进行报考估计到时候就没有名额了,用两天时间解成人高考,然后确定好专业进行提交材料进行报名就行了。吉林建筑大学成人高考招生专业:《大专》建筑工程技术、工程

CSAPP实验(1)----datalab_#endif //1 /* * bitxor - x^y using only ~ and & * -程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏16次。1 实验说明从CSAPP课程主页下载datalab实验所需的压缩包。下图说明本次实验需要补齐的函数名列表。2 实验2.1/* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~ & * Max ops: 14 * Rating: 1 */..._#endif //1 /* * bitxor - x^y using only ~ and & * example: bitxor(4, 5) = 1

OpenRTMFP/Cumulus开发笔记(8) Cumulus服务器端处理高并发连接实例-程序员宅基地

文章浏览阅读1.5k次。一.服务器地址的相关初始化,如下:void HighConcurrentServer::initServerAddr(){ std::string localAddr = "YOUR_SERVER_IP_ADDR";//这里要填写服务器IP地址,其他都是相关的socket编程的知识 serverAddr.sin_family = AF_INET; serverAd_cumulus服务器

推荐文章

热门文章

相关标签