php獲取遠(yuǎn)程圖片的兩種 CURL方式和sockets方式獲取遠(yuǎn)程圖片
更新時(shí)間:2011年11月07日 16:18:29 作者:
php獲取遠(yuǎn)程圖片的兩種:CURL方式和sockets方式獲取遠(yuǎn)程圖片,需要的朋友可以參考下。
方式1:sockets
$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各相關(guān)信息
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";
//主機(jī)名稱
$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);//以數(shù)據(jù)流的方式返回?cái)?shù)據(jù),當(dāng)為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;
}
?>
復(fù)制代碼 代碼如下:
$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各相關(guān)信息
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";
//主機(jī)名稱
$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
復(fù)制代碼 代碼如下:
<?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);//以數(shù)據(jù)流的方式返回?cái)?shù)據(jù),當(dāng)為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;
}
?>
您可能感興趣的文章:
相關(guān)文章
php實(shí)現(xiàn)多維數(shù)組中每個單元值(數(shù)字)翻倍的方法
這篇文章主要介紹了php實(shí)現(xiàn)多維數(shù)組中每個單元值(數(shù)字)翻倍的方法,涉及php操作數(shù)組的技巧,需要的朋友可以參考下2015-02-02使用php轉(zhuǎn)義輸出HTML到JavaScript
本文給大家分享的是個人項(xiàng)目中的一個小需求,需要使用php轉(zhuǎn)義輸出HTML到JavaScript,就寫了個function,推薦給大家,希望大家能夠喜歡。2015-03-03利用PHP實(shí)現(xiàn)智能文件類型檢測的實(shí)現(xiàn)代碼
通常我們想嚴(yán)格限制文件類型的時(shí)候,可以簡單地用$_FILES['myFile']['type'] 取得文件的 MIME類型然后來檢測它是否是合法的類型。2011-08-08PHP實(shí)現(xiàn)通過二維數(shù)組鍵值獲取一維鍵名操作示例
這篇文章主要介紹了PHP實(shí)現(xiàn)通過二維數(shù)組鍵值獲取一維鍵名操作,涉及php數(shù)組遍歷、判斷、搜索等相關(guān)操作技巧,需要的朋友可以參考下2019-10-10