php将数据下载到服务器压缩后上传至FTP
来源:互联网 发布:邵阳学院教务网络系统 编辑:程序博客网 时间:2024/06/06 03:12
前面写过一篇文章,使用RESTful API以post+json的方式给服务器传数据。这种方式使用与数据量比较小的时候。当数据量过大,十几兆甚至几百兆的时候,会引发很多问题。
这篇文章主要通过文件的形式上传到FTP服务器。对方服务器再通过FTP下载的方式,获取我的数据。这种方式相比post+json相对要安全一些。而且经过zip压缩后,文件要小很多。传输的数据也大幅度减少。
直接上代码
public function actionZipandftp(){ $filename = time().'zuiniubideceshi2.csv'; $file = '../../testdownload/'.$filename; $filedir = '../../testdownload/'; $data = 'woshishui,ni shi shui,this is a test!,once again this is a test!,do not forget, this is a test'; function write($filename,$data,$file){ $fp = fopen($file, 'we'); //当文件不存在时创建文件。 if($fp){ flock($fp,LOCK_EX);//同一时间锁定文件,只能一个人操作 fwrite($fp,$data); //将数据写入创建的文件中。 flock($fp,LOCK_UN);//保存数据握进行解锁文件并保存 fclose($fp); return true; }else{ return false; } } if(write($filename,$data,$file)){ $zip = new \ZipArchive; //这里使用的是php自带的zip压缩扩展 if ($zip->open($filedir.'test.zip',\ZipArchive::OVERWRITE) === TRUE) { $zip->addFile($filedir.$filename,$filename); // addFileToZip($filedir,$zip); $zip->close(); }else{ echo '压缩出错了'; } // 连接ftp服务器并上传 $conn_id = ftp_connect('192.168.84.20') or die('连接失败'); $login_result = ftp_login($conn_id, 'xiedj', '671.Xdj'); // 上传 if(ftp_put($conn_id, 'test.zip', $filedir.'test.zip', FTP_BINARY)) { echo "Successfully uploaded $file\n"; } else { echo "There was a problem while uploading $file\n"; } // 退出 ftp_close($conn_id); } }
代码说明
前3条说明,十分重要,也是我爬过的坑。
1.控制器中有一个write方法。这里我爬过坑。刚开始我是一http下载的方法,通过浏览器下载后再上传。但是有个问题,代码下载没有结束就会执行后面的代码。导致上传的文件为空文件。而write方法是直接将数据保存到服务器的文件中。保存结束返回true后再执行后面的代码,保证的传递数据的完整性。
2.有一个地方需要重点注意。上传文件的方法ftp_put中有四个参数。第一个参数为ftp服务器地址。第二个参数为文件名。第三个参数为文件路径。第四个参数是上传方式,该方法有两种上传方式,FTP_ASCII和FTP_BINARY,前者会转换换行符,一般用于文本文件的传输。后者不会对文件做任何处理,一般用于压缩文件、图片等文件的传输。这个地方其他的教程可能会忽略,造成不必要麻烦。这里需要注意一下。
3.压缩文件的时候,也存在一个坑。网上好多实例都没有交代清楚。很容易就掉到坑中。实例化zip对象后。调用添加文件addFile()方法,有两个参数,第一个参数为文件名,第二个参数为文件路径。因为第二参数不是必须参数,好多教程又是直接复制粘贴的。所有调用addFile方法的时候,将带有路径的文件名当做第一个参数传进去。此时会压缩会带入很多目录,看起来非常不爽。(这里想吐槽一下,复制粘贴,验证没有的文章,不知道发出来有什么意义。而且网上经常有这样的例子,一篇文章的代码错了,后面百度到的一万篇代码都错的这个位置。太恶心人了…)
4.csv格式是一种以“,”为分割的数据文件。
5.养成好习惯,使用需要声明开启的方法的时候,使用结束记得关闭。减少不必要的开销。
本来打算将压缩单独成一篇文章,发现时间有点晚,然后就写一起去了。写的比较简单,不过使用起来也并不复杂。
这里也想吐槽一下自己,太懒。做事也坚持不下了。积累了很多代码也没有写博客。这个问题确实需要改一改。希望自己以后能及时总结,坚持技术积累。
- php将数据下载到服务器压缩后上传至FTP
- 将本地文件上传到远程FTP服务器和从远程FTP服务器下载文件到本地
- 上传数据到FTP服务器
- 将文件上传到FTP服务器
- java将文件上传到ftp服务器
- 将图片上传到FTP服务器
- java 上传 下载 文件到FTP服务器
- php 一键上传文件,ftp上传和下载到其他服务器
- android将图片上传到php服务器
- mysql定期备份数据并压缩上传到ftp服务器的bat文件脚本,恢复建议使用SQLyog enterprise
- 用python通过ftp将文件上传到服务器
- 使用mysqldump ftp将备份集上传到远端服务器
- 如何将数据上传到onenet服务器
- 如何用命令行上传/下载整个文件夹到ftp服务器?
- 通过ftp上传图片到服务器并支持下载预览
- 将android客户端的错误日志压缩上传到服务器
- 在php中ftp上传文件到服务器的操作
- (PHP)用cURL从本地上传文件到FTP服务器
- 网页共用头部或共用底部该如何编写代码
- java double转string
- unity 3d GUI.Button介绍
- LeetCode 86 Partition List
- If I were a boy
- php将数据下载到服务器压缩后上传至FTP
- 移动端IM系统的协议选型:UDP还是TCP?
- 浅谈AJAX
- [Bash Shell] Shell学习笔记
- 进程和线程的区别
- Jquery和Dom元素的比较案例
- 代码整洁之道读书笔记(九)
- EXISITS操作符,相关子查询,with子句
- Single Number III_260