PHP curl函数制 exec_ch和get_headers
昨日,在项目中,有人在判断Youtube下的某个视频是否能够播放,写下了如下的代码: $request_url = 'http://youtube.com/get_video_info?video_id=' . $vid . '&el=vevo&fmt=18&asv=2&hd=1';$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $request_url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, True);$data = curl_exec($ch);curl_close($ch);unset($ch);if ($data === false) {$this->deleteVideo($video['id']);echo "节目: " . $vid . " 节目id" . $video['id'] . "无效,删除.\n";continue;}parse_str($data, $details);unset($data);if (!isset($details['url_encoded_fmt_stream_map']) || empty($details['url_encoded_fmt_stream_map'])) {$this->deleteVideo($video['id']);echo "节目: " . $vid . " 节目id" . $video['id'] . "无效,删除.\n";continue;}$newstr = explode(",", $details['url_encoded_fmt_stream_map']);$str1 = explode("&", $newstr[0]);$obj = array();for ($j = 0; $j < count($str1); $j++) {$str2 = explode("=", $str1[$j]);if (!isset($obj[$str2[0]])) {$obj[$str2[0]] = $str2[1];}}$ary_re['source_url'] = urldecode($obj['url']);if (empty($ary_re['source_url']) || !isset($ary_re['source_url'])) {$this->deleteVideo($video['id']);echo "节目: " . $vid . " 节目id" . $video['id'] . "无效,删除.\n";continue;} else {$bool = $this->getMobileCurl($ary_re['source_url']); //不能够播放if ($bool === false) {$this->deleteVideo($video['id']);echo "节目: " . $vid . " 节目id" . $video['id'] . "无效,删除.\n";continue;}}$right_nums++;
getMobileCurl的函数定义如下:
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $request_url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, True);$data = curl_exec($ch);curl_close($ch);unset($ch);if ($data === false) {return false }
使用 curl_exec判断当前连接能否播放,这样就出现了一个问题:
提示内存溢出!
我专门调试了一下,发现$data的数据占的内存很大,打开那个$request_url,也就是Youtube的视频的实际播放地址,才发现,视频是高清1080P,而且是有1个多小时的长度,这才发现问题的原因是$data这是是视频的内容,所以会溢出,
果断将getMobileCurl的函数处理成获取服务器的响应头信息:
function getMobileCurl($url){$res = get_headers($url, 1);$response_status = $res[0];if (strpos($response_status, "200") !== false || strpos($response_status, "302") !== false || strpos($response_status, "301") !== false) {return true;} else {return false;}}
问题解决:
在使用Curl函数进行爬虫处理的时候,要注意目标是否是个视频,文件等比较大的目标,以及自己的需求。
转载于:https://www.cnblogs.com/bing-yu12/p/6638990.html
PHP curl函数制 exec_ch和get_headers相关推荐
- 【转】PHP CURL 教学
转载自:http://inspire.twgg.org/c/programming/php-curl-teaching.html 目前最完整的CURL中文说明,学PHP的要好好掌握,有很多的参数,大部 ...
- 如何修改Moodle上传文件大小的限制
这个文章不适应所有版本,所以要自己看明白再处理. moodle中有句话,关于上传文件大小的, 一般来说,Moodle 系统中有四种级别的文件限制 - system level (php.ini) ...
- 使用curl获取Location:重定向后url
在php获取http头部信息上,php有个自带的函数get_headers(),我以前也是用这个的,听说效率在win上不咋地,再加上最近研究百度url无果,写了cURL获取重定向url的php代码来折 ...
- php curl cookie,php中curl获取返回页面的cookie
php的curl可以模仿用户浏览网页并且获取网页的cookie,获取cookie还有专用的参数如CURLOPT_COOKIEJAR 用于保存 cookie 到文件了,下面一起来看几个例子吧. curl ...
- php get header url,php函数get_headers是HEAD请求还是GET请求
在做一个获取远程图片大小的功能时,因为只是要获取大小,所以不用下载整张图片,只需要获取头信息就可以了.在php手册上看到get_headers能直接返回头信息,非常高兴,一行代码就搞定了.可是疑问就来 ...
- linux 下载 命令 wget 和 curl
From:http://www.jb51.net/LINUXjishu/86326.html From :Linux curl 命令详解 - http://www.cnblogs.com/duhuo/ ...
- jquery 判断 重定向url_使用curl获取Location:重定向后url
在php获取http头部信息上,php有个自带的函数get_headers(),我以前也是用这个的,听说效率在win上不咋地,再加上最近研究百度url无果,写了cURL获取重定向url的php代码来折 ...
- curl模拟post请求
另外可尝试 postman工具 或者用request 直接请求 CURL 发送POST请求curl -header "Content-Type: application/json" ...
- 在CentOS 6.8 x86_64上安装nghttp2最新版及让curl具有http2特性
nghttp2是什么? nghttp2是一个实现IETF官方HTTP/2和HPACK头压缩算法的C库,但不限如此,在C库基础上,还实现了http2的客户端,服务器,代理服务器,以及压测工具.参见官网链 ...
最新文章
- 关于常用mysql的文件
- oauth2和jwt学习资料
- python设计模式-观察者
- oracle apex 链接,Oracle APEX 5.0 新手教程(七) URL格式说明
- python cv.rectangle_Python OpenCV cv2.rectangle()用法及代码示例
- 卷积神经网络训练准确率突然下降_从MobileNet看轻量级神经网络的发展
- 共享单车项目计划书_2020年共享单车商业计划书模板
- 在Ubuntu Linux Server上使用奔图P2206NW打印机
- Young不等式的一个新证明
- [剑指Offer]:翻转单词顺序
- Python高级编程第2版_张亮 阿信(译)_人民邮电出版社_2017-10_v2_完整版
- Spring Boot学习笔记(二十一)Spring boot 数据校验 @Validated、@Valid用法详解
- xgboost模型训练出来的错误Error during wrapup: NA/NaN argument
- SparkOutOfMemoryError: Unable to acquire 65536 bytes of memory, got 0
- java统计图表代码_java swing下用jfreechart开发图表统计情况
- eclipse的常用操作
- java不足位数补0
- STL(标准模板库)—Vector
- 浅谈木马的ASP收信方式
- 线阵相机参数设置和原理解释 (转载)很棒。
热门文章
- springboot自动配置原理_今日份学习之Spring Boot自动配置实现原理
- 九大背包问题专题--混合背包问题(状态转移)
- 2018蓝桥杯B组:第几个幸运数字(JAVA/C++)
- 2017蓝桥杯B组:最长公共子序列(动态规划详解(配图))
- Unity3D之NGUI基础3:UILabel显示字体
- Echarts数据可视化radar雷达坐标系,开发全解+完美注释
- quartus仿真21:JK触发器和D触发器实现110序列探测器
- MOV AH,XXH INT XXH——BIOS中断和DOS中断
- ffmpeg推送直播流的技术进展
- question1 赋值运算操作符