PHP下载网络资源文件,有哪些好的解决方案?
引言
在程序内下载资源文件,这本身就是一个充满了不确定因素的事情。可能会因为网络超时连接中断,或者程序故障抛出各种异常,在实际中我们一般要避免在程序流程中下载文件。
如果是实在无法避免,用什么办法比较高效呢?或者说比较轻量级呢?本文就来说一说。
学习时间
最直接的办法就是使用内置函数 file_get_contents。参数形式如下:
int file_put_contents( string $filename, mixed $data[, int $flags = 0[, resource $context]] )
这个函数设计的很巧妙,兼容了很多场景下的使用。我们只需要按照相应的参数填入,就可以组装出各种各样的功能。
如果是下载资源,那么会分为两步。第一,把远程资源拿到本地。第二,把该资源写入本地文件。使用代码实现如下:
file_put_contents("Tmpfile.zip", fopen("http://someurl/file.zip", 'r'));
其中在位置参数 $data 的位置,传入了一个fopen生成的文件句柄。
根据函数手册上所说,如果$data 指定的是流,则该流的缓冲区将被复制到指定的文件。对标的函数是 stream_copy_to_stream。那样写起来就得是这样的:
是不是没有file_put_contents精简。难怪很多敲代码的老司机,习惯于使用这一个函数进行网络请求呢!
文件操作
纯粹使用文件操作,也没有问题,使用PHP提供的 fopen fclose fwrite fread 等函数,完全可以胜任。我们将其封装为一个助手函数:
因为不能确定原始文件的长度,在读写的时候,需要注意缓存区的大小,分块读入和写入。其中参数 1024 * 8,指定每次读写 8K 字节。使用 feof 判断文件是否到尾部。
网络请求
既然是网络资源文件,使用上面的函数,无非都要发起 HTTP 请求。既然是网络请求,何不把这个功能交给 cURL 呢?这样对于请求头,请求体,响应体等等全程 HTTP 环节,都可以在程序内操作,容错性肯定不差。
下面我们使用 cURL 库进行文件请求操作:
如果是小小的资源文件,下载起来不费时间,也不会阻碍接下来的流程。如果是超大文件,费时间,而且还可能中断,有没有断点续传?有没有自动压缩?这都是问题。
所以,使用网络请求下载大文件,这已经超出了 PHP 内置函数的范畴。我们需要功能更为强大的下载器,多资源,多线程,断线续传,自动重试。
写在最后
本文通过3中方法对比了实现小文件下载的功能,各有优劣,根据不同的场景需要开发者做出适当的选择。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
你了解转印纸吗?
转印纸是指转印一种印有图案的纸,而该纸的图案能够转印到其他表面上。通常必须先沾湿纸张,正面朝下转印。把转印纸紧贴在第二层表面,然后揭掉背纸。那么关于转印纸你知道多少呢?接下来就和小编一起来了解下关于转印纸的知识吧。
工业化或大量生产的陶瓷器常用转印纸进行装饰。“转移印花法”一词,也包括转印纸转印过程在内。至于超现实主义转印纸指的是艺术家把不透明水彩颜料涂在一张纸上,再把另一张纸放于其上,然后按压第二张纸的若干处后拿起的一种过程。这种技法可形成类似具有异国情调的花草、矿物沉淀或海绵的效果。
转印纸是可以将要烫印的图案用喷墨打印机输出,再印到衣服上。转印纸主要分为浅色转印纸和深色转印纸。浅色转印纸适合印白色等浅色衣服,深色转印纸适合印黑色等深色衣服。
转印纸又称为传票纸,转印纸可以用于制作电车和公共汽车传票。转印纸的特性近似于机械木浆招贴纸,但转印纸的颜色范围更宽,定量在100g/㎡以上,转印纸具有优良的均一性和厚度,较高的挺度和外观性能(如表面平整、细腻)。使用机械木浆在长网造纸机上抄造而成。
转印纸还可分为金属转印纸和颜料转印纸两大类,广义上还包括用热敏性涂料或压敏性涂料生产的涂布纸,表面涂有湿润转印膜的纸,如刻字转印膜刻等。
转印纸解决了印刷需求量大的问题,它还可以实现个性定制服务,转印纸种类多样,操作简便,深受大家的喜爱,具有很好的发展前景。以上就是小编对于转印纸的介绍,希望通过这篇文章能使大家对转印纸有更进一步的了解和认识。
特别声明:文章来源于视界网,原文请点击()
请问你们加黄V都用什么方式加的?
我是稀里糊塗地听朋友说"您申请个头条号吧",于是下载App,填写个人信息,把个人资料上传之后被告知30天内回答4个问题,这还不简单,于是当时就回答了好几个,于是就以为没事了,直到看见"30天内完成4个"优质"回答,否则取消资格"的提示,啊?还要优质,还要审核?还会取消?这回上了贼船下不来了,硬着头皮上吧。
好在我73岁,玩儿模特33年,是中国首批中老年模特之一,89年从数学专业转到新兴的美容专业,中港合作的蒙妮坦美容专业并最终成为高级教师,33年来一刻也不敢放松过学习。
除了学模特的猫步造型,还钻研怎么去教别人。学舞蹈音乐基础,学审美的理论基础,学色彩学服饰搭配⋯对了还学如何与不同的人相处,如何管理团队呢,毕竟是全国首支中老年模特队:夕阳红的队长嘛。
说不上多么精,面面俱到仅是皮毛倒是有了。
疫情期间宅在家里,终于有大把的时间将以往学到做到的知识技能做个补充总结,于是在两个月的时间里,完成了《敲黑板一一模特表演的应知应会》二十篇的美篇。
积累了这么多知识再结合悟空回答里的问题,我前7天就有3篇文章获得了优质回答,最后一鼓作气连续发了几篇,终于在第13天完成了4篇,从而通过了时尚领域的黄V。
我的体会是:做自己喜欢并擅长的事情,结合照片文字记录下来,没有捷径不可能讨巧,歪门邪道更不好使,只有不懈的坚持和努力,无心插柳柳可以成荫,既提升了自己又帮助到別人,开心!
还没有评论,来说两句吧...