昨日,在项目中,有人在判断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相关推荐

  1. 【转】PHP CURL 教学

    转载自:http://inspire.twgg.org/c/programming/php-curl-teaching.html 目前最完整的CURL中文说明,学PHP的要好好掌握,有很多的参数,大部 ...

  2. 如何修改Moodle上传文件大小的限制

    这个文章不适应所有版本,所以要自己看明白再处理. moodle中有句话,关于上传文件大小的, 一般来说,Moodle 系统中有四种级别的文件限制 - system level (php.ini)    ...

  3. 使用curl获取Location:重定向后url

    在php获取http头部信息上,php有个自带的函数get_headers(),我以前也是用这个的,听说效率在win上不咋地,再加上最近研究百度url无果,写了cURL获取重定向url的php代码来折 ...

  4. php curl cookie,php中curl获取返回页面的cookie

    php的curl可以模仿用户浏览网页并且获取网页的cookie,获取cookie还有专用的参数如CURLOPT_COOKIEJAR 用于保存 cookie 到文件了,下面一起来看几个例子吧. curl ...

  5. php get header url,php函数get_headers是HEAD请求还是GET请求

    在做一个获取远程图片大小的功能时,因为只是要获取大小,所以不用下载整张图片,只需要获取头信息就可以了.在php手册上看到get_headers能直接返回头信息,非常高兴,一行代码就搞定了.可是疑问就来 ...

  6. linux 下载 命令 wget 和 curl

    From:http://www.jb51.net/LINUXjishu/86326.html From :Linux curl 命令详解 - http://www.cnblogs.com/duhuo/ ...

  7. jquery 判断 重定向url_使用curl获取Location:重定向后url

    在php获取http头部信息上,php有个自带的函数get_headers(),我以前也是用这个的,听说效率在win上不咋地,再加上最近研究百度url无果,写了cURL获取重定向url的php代码来折 ...

  8. curl模拟post请求

    另外可尝试 postman工具 或者用request 直接请求 CURL 发送POST请求curl -header "Content-Type: application/json" ...

  9. 在CentOS 6.8 x86_64上安装nghttp2最新版及让curl具有http2特性

    nghttp2是什么? nghttp2是一个实现IETF官方HTTP/2和HPACK头压缩算法的C库,但不限如此,在C库基础上,还实现了http2的客户端,服务器,代理服务器,以及压测工具.参见官网链 ...

最新文章

  1. 关于常用mysql的文件
  2. oauth2和jwt学习资料
  3. python设计模式-观察者
  4. oracle apex 链接,Oracle APEX 5.0 新手教程(七) URL格式说明
  5. python cv.rectangle_Python OpenCV cv2.rectangle()用法及代码示例
  6. 卷积神经网络训练准确率突然下降_从MobileNet看轻量级神经网络的发展
  7. 共享单车项目计划书_2020年共享单车商业计划书模板
  8. 在Ubuntu Linux Server上使用奔图P2206NW打印机
  9. Young不等式的一个新证明
  10. [剑指Offer]:翻转单词顺序
  11. Python高级编程第2版_张亮 阿信(译)_人民邮电出版社_2017-10_v2_完整版
  12. Spring Boot学习笔记(二十一)Spring boot 数据校验 @Validated、@Valid用法详解
  13. xgboost模型训练出来的错误Error during wrapup: NA/NaN argument
  14. SparkOutOfMemoryError: Unable to acquire 65536 bytes of memory, got 0
  15. java统计图表代码_java swing下用jfreechart开发图表统计情况
  16. eclipse的常用操作
  17. java不足位数补0
  18. STL(标准模板库)—Vector
  19. 浅谈木马的ASP收信方式
  20. 线阵相机参数设置和原理解释 (转载)很棒。

热门文章

  1. springboot自动配置原理_今日份学习之Spring Boot自动配置实现原理
  2. 九大背包问题专题--混合背包问题(状态转移)
  3. 2018蓝桥杯B组:第几个幸运数字(JAVA/C++)
  4. 2017蓝桥杯B组:最长公共子序列(动态规划详解(配图))
  5. Unity3D之NGUI基础3:UILabel显示字体
  6. Echarts数据可视化radar雷达坐标系,开发全解+完美注释
  7. quartus仿真21:JK触发器和D触发器实现110序列探测器
  8. MOV AH,XXH INT XXH——BIOS中断和DOS中断
  9. ffmpeg推送直播流的技术进展
  10. question1 赋值运算操作符