當前位置:首頁 » 編程語言 » php遠程抓取圖片

php遠程抓取圖片

發布時間: 2022-05-06 16:06:56

A. php 讀取圖片並輸出

<?php
header('Content-Type:image/png');
$url="http://hbyw.e21.e.cn/global/gd.php";//圖片鏈接
$ch=curl_init();
//Cookie:PHPSESSID=
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_COOKIE,'PHPSESSID=');//如果不需要cookies就刪除這條語句
curl_setopt($ch,CURLOPT_RETURNTRANSFER,0);
curl_setopt($ch,CURLOPT_TIMEOUT,0);//忽略超時
curl_setopt($ch,CURLOPT_NOBODY,false);
$str=curl_exec($ch);
curl_close($ch);

B. php怎麼高效獲取遠程圖片尺寸

/**
*獲取遠程圖片的寬高和體積大小
*
*@paramstring$url遠程圖片的鏈接
*@paramstring$type獲取遠程圖片資源的方式,默認為curl可選fread
*@paramboolean$isGetFilesize是否獲取遠程圖片的體積大小,默認false不獲取,設置為true時$type將強制為fread
*@returnfalse|array
*/
functionmyGetImageSize($url,$type='curl',$isGetFilesize=false)
{
//若需要獲取圖片體積大小則默認使用fread方式
$type=$isGetFilesize?'fread':$type;

if($type=='fread'){
//或者使用socket二進制方式讀取,需要獲取圖片體積大小最好使用此方法
$handle=fopen($url,'rb');

if(!$handle)returnfalse;

//只取頭部固定長度168位元組數據
$dataBlock=fread($handle,168);
}
else{
//據說CURL能緩存DNS效率比socket高
$ch=curl_init($url);
//超時設置
curl_setopt($ch,CURLOPT_TIMEOUT,5);
//取前面168個字元通過四張測試圖讀取寬高結果都沒有問題,若獲取不到數據可適當加大數值
curl_setopt($ch,CURLOPT_RANGE,'0-167');
//跟蹤301跳轉
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
//返回結果
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

$dataBlock=curl_exec($ch);

curl_close($ch);

if(!$dataBlock)returnfalse;
}

//將讀取的圖片信息轉化為圖片路徑並獲取圖片信息,經測試,這里的轉化設置jpeg對獲取png,gif的信息沒有影響,無須分別設置
//有些圖片雖然可以在瀏覽器查看但實際已被損壞可能無法解析信息
$size=getimagesize('data://image/jpeg;base64,'.base64_encode($dataBlock));
if(empty($size)){
returnfalse;
}

$result['width']=$size[0];
$result['height']=$size[1];

//是否獲取圖片體積大小
if($isGetFilesize){
//獲取文件數據流信息
$meta=stream_get_meta_data($handle);
//nginx的信息保存在headers里,apache則直接在wrapper_data
$dataInfo=isset($meta['wrapper_data']['headers'])?$meta['wrapper_data']['headers']:$meta['wrapper_data'];

foreach($dataInfoas$va){
if(preg_match('/length/iU',$va)){
$ts=explode(':',$va);
$result['size']=trim(array_pop($ts));
break;
}
}
}

if($type=='fread')fclose($handle);

return$result;
}

//測試的圖片鏈接
echo'<pre>';
$result=myGetImageSize('http://s6.mogujie.cn/b7/bao/120630/2kpa6_kqywusdel5bfqrlwgfjeg5sckzsew_345x483.jpg_225x999.jpg','curl');
print_r($result);
echo'<hr/>';
$result=myGetImageSize('http://s5.mogujie.cn/b7/bao/120629/6d3or_kqytasdel5bgevsugfjeg5sckzsew_801x1193.jpg','fread');
print_r($result);
echo'<hr/>';
$result=myGetImageSize('https://gss0..com/7LsWdDW5_xN3otqbppnN2DJv/zhengmingjiang/pic/item/1c5f338c6d22d797503d92f9.jpg','fread',true);
print_r($result);
echo'<hr/>';
$result=myGetImageSize('http://www.vegandocumentary.com/wp-content/uploads/2009/01/.png','curl',true);
print_r($result);
echo'<hr/>';
$result=myGetImageSize('http://jiaoyou.ai9475.com/front/templates/jiaoyou/styles/default/image/ad_pic_1.gif','fread');
print_r($result);

C. Php 獲取遠程伺服器相同前綴圖片地址

寫出下面的源碼,php遠程抓取圖片小程序。可以讀取css文件並抓取css代碼中的背景圖片,下面這段代碼也是針對抓取css中圖片而編寫的。
<?php<http://hounwang.com/lesson.html>
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ERROR|E_WARNING);
//全局配置
$fromFile = "aaa.css"; //要抓取的文件
$savePath = "ttttttttt"; //保存路徑
$fromDomain = "http://www.xxx.com/"; //要抓取的域名
//讀取css樣式並且分離出所有image的url
$str = file_get_contents($fromFile);
$strArr = explode("url(",$str);
$i = 0;
foreach($strArr as $val){
$val1 = explode(")",$val);
if(strpos($val1[0],'jpg')||strpos($val1[0],'png')||strpos($val1[0],'gif'))
$imgUrl[$i++] = $val1[0];
}
//PS:上面可以用正則的,但是我覺得這樣也不錯
//開始抓取
foreach($imgUrl as $url){
if($url=="") continue;
$filename = $savePath.$url;
$url = $fromDomain.$url;
getImage($url,$filename);
}
function getImage($url,$filename){
ob_start();
$context = stream_context_create(
array (
'http' => array (
'follow_location' => false // don't follow redirects
)
)
);
//請確保php.ini中的fopen wrappers已經激活
readfile( $url,false,$context);
$img = ob_get_contents();
ob_end_clean();
$fp2 = @fopen($filename,"a");
fwrite($fp2,$img);
fclose($fp2);
echo $filename." ok √<br/>";
}
?>
然後,你指定的文件夾下面都是圖片
需要設置一個域名或者是使用IP進行訪問然後將image輸出圖片的地址替換成帶有域名或者是IP的imageURL服務路徑才能正常訪問,否則是無法訪問的。

更多問題到問題求助專區《http://bbs.hounwang.com/》

D. PHP如何獲取伺服器圖片

你在上傳圖片的時候,把圖片地址存到資料庫內,直接查詢輸出就好了
如果不是通過代碼上傳的,www文件夾是根目錄文件夾,圖片地址為:http://你的域名/img/name.jpg

E. thinkphp用file_put_contents()保存遠程圖片到伺服器

你在逗我,怎麼可能直接用程序直接寫入另一個伺服器。

我的思路是(沒有試驗過)

  1. 轉換為圖片為二進制文件進行上傳到另一個伺服器進行處理保存

  2. 轉換圖片為base64 用curl請求伺服器進行處理

  3. 模擬表單請求


F. php一個頭疼的問題,關於圖片遠程抓取

估計是伺服器分配給PHP的資源不夠吧....
可以將php.ini中的memory_limit調大一點試試.

G. php如何同時獲取遠程伺服器圖片和響應頭

獲取圖片和響應頭, 一般就是將圖片保存成文件, 響應頭, 可以分析返回數據,如果是cookie的話,分析cookie.顯示到首頁上,就需要你將圖片的URL修改對應的模板,資料庫或者實體文件了.

H. PHP下載遠程圖片jpg 格式,

<?php
header("Content-type:application/octet-stream");
header("Accept-Ranges:bytes");
header("Accept-Length:".filesize($path));
header("Content-Disposition:attachment;filename=".basename($path));
readfile($path);
?>

I. php如何通過URL批量下載圖片,這些圖片是設計作品,

如果URL有規則,那麼可以考慮js做前端,php做後端

具體思路如下

js發送ajax請求給php,php抓取圖片,抓取完畢響應前端,前端提示完成(或者更新進度條),然後前端js再次發起ajax請求,直至全部抓取完畢


對了 url有規律的話 用迅雷下載也是挺不錯的

J. 在PHP中,抓取遠程圖片到本地,你會用什麼函數

實現單個圖片抓取可以使用file_get_contents();
考慮到並行的話,python 爬蟲效率比較高。

熱點內容
c語言fgets用法 發布:2024-05-10 10:54:21 瀏覽:581
編程貓新手 發布:2024-05-10 10:54:10 瀏覽:910
python關鍵詞 發布:2024-05-10 10:50:49 瀏覽:391
vc訪問postgresql 發布:2024-05-10 10:49:09 瀏覽:686
解壓軟體開源 發布:2024-05-10 10:36:40 瀏覽:959
三角加密IC 發布:2024-05-10 10:27:07 瀏覽:214
源碼編譯成jar包 發布:2024-05-10 10:14:13 瀏覽:636
變數類型存儲 發布:2024-05-10 09:56:27 瀏覽:105
linux重裝linux系統 發布:2024-05-10 09:50:38 瀏覽:905
md5演算法java 發布:2024-05-10 09:24:56 瀏覽:84