php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2015-01-24信息快讯网
$a = "http://jb51.net/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg"; $local = 'socket1.gif'; $aa = getImg($a,$local); /* *@ 完整的图片地址 *@ 要存储的文件名 */ function getImg( $url = "", $filename = "" ) { if(is_dir(basename($filename))) { echo "The Dir was not exits"; Return false; } //去除URL连接上面可能的引号 $url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url ); if (!extension_loaded('sockets')) return false; //获取url各相关信息 preg_match( '/http:\/\/([^\/\:]+(\:\d{1,5})?)(.*)/i', $url, $matches ); if (!$matches) return false; $sock = socket_create( AF_INET, SOCK_STREAM, SOL_TCP ); if ( !@socket_connect( $sock, $matches[1], $matches[2] ? substr($matches[2], 1 ) : 80 ) ) { return false; } //图片的相对地址 $msg = 'GET ' . $matches[3] . " HTTP/1.1\r\n"; //主机名称 $msg .= 'Host: ' . $matches[1] . "\r\n"; $msg .= 'Connection: Close' . "\r\n\r\n"; socket_write( $sock, $msg ); $bin = ''; while ( $tmp = socket_read( $sock, 10 ) ) { $bin .= $tmp; $tmp = ''; } $bin = explode("\r\n\r\n", $bin); $img = $bin[1]; $h = fopen( $filename, 'wb' ); $res = fwrite( $h, $img ) === false ? false : true; @socket_close( $sock ); Return $res; }
方式2:curl
<?php $url = "http://jb51.net/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg"; $filename = 'curl.gif'; //http://jb51.net getImg($url, $filename); /* *@通过curl方式获取制定的图片到本地 *@ 完整的图片地址 *@ 要存储的文件名 */ function getImg($url = "", $filename = "") { if(is_dir(basename($filename))) { echo "The Dir was not exits"; Return false; } //去除URL连接上面可能的引号 $url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url ); $hander = curl_init(); $fp = fopen($filename,'wb'); curl_setopt($hander,CURLOPT_URL,$url); curl_setopt($hander,CURLOPT_FILE,$fp); curl_setopt($hander,CURLOPT_HEADER,0); curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1); //curl_setopt($hander,CURLOPT_RETURNTRANSFER,false);//以数据流的方式返回数据,当为false是直接显示出来 curl_setopt($hander,CURLOPT_TIMEOUT,60); /*$options = array( CURLOPT_URL=> 'http://jb51.net/content/uploadfile/201106/thum-f3ccdd27d2000e3f9255a7e3e2c4880020110622095243.jpg', CURLOPT_FILE => $fp, CURLOPT_HEADER => 0, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_TIMEOUT => 60 ); curl_setopt_array($hander, $options); */ curl_exec($hander); curl_close($hander); fclose($fp); Return true; } ?>
基于php socket(fsockopen)的应用实例分析
php curl的深入解析
解析php中mysql_connect与mysql_pconncet的区别详解
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
PHP闭包(Closure)使用详解
基于curl数据采集之正则处理函数get_matches的使用
基于curl数据采集之单页面并行采集函数get_htmls的使用
基于curl数据采集之单页面采集函数get_html的使用
使用php get_headers 判断URL是否有效的解决办法
PHP中使用cURL实现Get和Post请求的方法
PHP动态分页函数,PHP开发分页必备啦
php数组函数序列之array_pop() - 删除数组中的最后一个元素
PHP 小心urldecode引发的SQL注入漏洞
PHP判断远程url是否有效的几种方法小结
php下利用curl判断远程文件是否存在的实现代码
PHP将DateTime对象转化为友好时间显示的实现代码
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
PHP中通过语义URL防止网站被攻击的方法分享
PHP url 加密解密函数代码
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
php程序的国际化实现方法(利用gettext)
php中使用Curl、socket、file_get_contents三种方法POST提交数据
linux下为php添加curl扩展的方法
PHP读取网页文件内容的实现代码(fopen,curl等)
php下通过curl抓取yahoo boss 搜索结果的实现代码