本人不才,当急之下要修改一个图片采集函数功能,要添加伪referer设置,以下是图片采集函数
// Function: 获取远程图片并把它保存到本地
// 变量说明: 
// $url 是远程图片的完整URL地址,不能为空。
// $filename 是可选变量: 如果为空,本地文件名将基于时间和日期 
// 自动生成. function GrabImage($url,$filename="") { 
  if($url==""):return false;endif;   if($filename=="") { 
    $ext=strrchr($url,"."); 
    if($ext!=".gif" && $ext!=".jpg"):return false;endif; 
    $filename=date("dMYHis").$ext; 
  }   ob_start(); 
  readfile($url); 
  $img = ob_get_contents(); 
  ob_end_clean(); 
  $size = strlen($img);   $fp2=@fopen($filename, "a"); 
  fwrite($fp2,$img); 
  fclose($fp2);   return $filename; 

如何修改此函数,让它具有设置referer的功能?

解决方案 »

  1.   

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);//这是目标地址
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_REFERER,   $referer);//这里伪造
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
      

  2.   

    细节自己调
    $opts = array(
        'http' => array(
            'method'    => "GET",
            'header'    => "Referer: www.abc.com\r\n",
        )   
    );$context = stream_context_create($opts);$file = file_get_contents('http://www.abc.com/test.jpg', false, $context);
      

  3.   

    不支持curl用fsockopen$out = "GET $target HTTP/1.1\r\n"; 
    $out .= "Host: $host\r\n";
    $out .= "Referer: $referer\r\n"; //这里伪造
    $out .= "Connection: Close\r\n\r\n"; 
      

  4.   

    function grab_image($url, $pathname) {
        $opts = array(
            'http' => array('header' => "Referer: $url\r\n")
        );  
        
        $context = stream_context_create($opts); 
        $file = file_get_contents($url, false, $context);
        if ($file === false) 
            return false;    return file_put_contents($pathname, $file);
    }