php将数据下载到服务器压缩后上传至FTP
2016-12-04 23:03
260 查看
前面写过一篇文章,使用RESTful API以post+json的方式给服务器传数据。这种方式使用与数据量比较小的时候。当数据量过大,十几兆甚至几百兆的时候,会引发很多问题。
这篇文章主要通过文件的形式上传到FTP服务器。对方服务器再通过FTP下载的方式,获取我的数据。这种方式相比post+json相对要安全一些。而且经过zip压缩后,文件要小很多。传输的数据也大幅度减少。
直接上代码
代码说明
前3条说明,十分重要,也是我爬过的坑。
1.控制器中有一个write方法。这里我爬过坑。刚开始我是一http下载的方法,通过浏览器下载后再上传。但是有个问题,代码下载没有结束就会执行后面的代码。导致上传的文件为空文件。而write方法是直接将数据保存到服务器的文件中。保存结束返回true后再执行后面的代码,保证的传递数据的完整性。
2.有一个地方需要重点注意。上传文件的方法ftp_put中有四个参数。第一个参数为ftp服务器地址。第二个参数为文件名。第三个参数为文件路径。第四个参数是上传方式,该方法有两种上传方式,FTP_ASCII和FTP_BINARY,前者会转换换行符,一般用于文本文件的传输。后者不会对文件做任何处理,一般用于压缩文件、图片等文件的传输。这个地方其他的教程可能会忽略,造成不必要麻烦。这里需要注意一下。
3.压缩文件的时候,也存在一个坑。网上好多实例都没有交代清楚。很容易就掉到坑中。实例化zip对象后。调用添加文件addFile()方法,有两个参数,第一个参数为文件名,第二个参数为文件路径。因为第二参数不是必须参数,好多教程又是直接复制粘贴的。所有调用addFile方法的时候,将带有路径的文件名当做第一个参数传进去。此时会压缩会带入很多目录,看起来非常不爽。(这里想吐槽一下,复制粘贴,验证没有的文章,不知道发出来有什么意义。而且网上经常有这样的例子,一篇文章的代码错了,后面百度到的一万篇代码都错的这个位置。太恶心人了…)
4.csv格式是一种以“,”为分割的数据文件。
5.养成好习惯,使用需要声明开启的方法的时候,使用结束记得关闭。减少不必要的开销。
本来打算将压缩单独成一篇文章,发现时间有点晚,然后就写一起去了。写的比较简单,不过使用起来也并不复杂。
这里也想吐槽一下自己,太懒。做事也坚持不下了。积累了很多代码也没有写博客。这个问题确实需要改一改。希望自己以后能及时总结,坚持技术积累。
这篇文章主要通过文件的形式上传到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上传和下载到其他服务器
- C#学习笔记之从FTP服务器上传和下载数据(二)
- C#学习笔记之从FTP服务器上传和下载数据(一)
- mysql定期备份数据并压缩上传到ftp服务器的bat文件脚本,恢复建议使用SQLyog enterprise
- PHP程序上传文件时,想指定上传到另一台服务器,php-ftp_connect
- PHP中FTP上传文件和下载文件实例代码
- java上传下载ftp服务器的代码!!
- JAVA实现FTP服务器文件的上传,下载,删除功能
- 上传数据到服务器以及从服务器下载数据
- Linux下使用Shell脚本向FTP服务器上传或下载一个文件
- java做的比较完善的FTP上传下载文件服务器源码
- linux下ftp的上传数据到服务器深入剖析
- 定时到ftp服务器上的某个目录下载最新数据
- [PHP] 本地服务器正常,FTP上传到服务器后页面出现乱码
- php下连接ftp实现文件的上传、下载、删除文件实例代码
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- 利用scp将压缩打包的数据上传另一台服务器上的解决方法
- 从ftp服务器上下载文件树到本地电脑的php程序
- sql server 2000 导出数据到EXCEL并上传到远程FTP服务器上
- Apache FTPClient 匿名登录上传下载数据