本帖最后由 fixlife 于 2012-02-03 13:03:28 编辑

解决方案 »

  1.   

    $tp = @fopen('demo.gif', 'wb');
    fwrite($tp, $rawdata);
    fclose($tp);
      

  2.   


    我用readfile采集没有问题, 不过, 担心被采集的网站会发现来路网站, 所以, 改用curl采集,谢谢您
      

  3.   


    $url = 'http://avatar.profile.csdn.net/1/8/E/2_chenshuliang.jpg';
    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT,60); 
    $rawdata=curl_exec($ch);
    curl_close ($ch);
    $tp = fopen('test.jpg', 'wb');
    fwrite($tp, $rawdata);
    fclose($tp);
    windows环境测试成功。
      

  4.   


    感谢指点刚刚测试了一下, 采集到的图片还是 0 kb我用的是centos另外, 您在例子中提到的 $tp = fopen('test.jpg', 'wb');我用的是变量 $tp = fopen($filename, 'wb');$filename 的样式为: 服务器绝对路径+图片名称.后缀真着急, 不知道问题到底在哪里呢?
      

  5.   


    另外请问, 这个 $rawdata 到底返回什么东西?
      

  6.   

    刚刚测试了一下, curl 连普通网页也抓不到, 生成的文件 都是 0kb
      

  7.   


    就用这个做样板吧:http://www.google.com.hk/intl/zh-CN/images/logo_cn.png
      

  8.   

    难道是我的系统有问题?比如, curl 自身没有配置正确 等?
      

  9.   

    或者变通一下这个问题:假如我用 readfile 采集对方网站的话, 对方是否能够发现来路?如果能发现, 有没有办法隐藏?
      

  10.   

    这段代码没有任何问题的,在ubuntu下$url = 'http://www.google.com.hk/intl/zh-CN/images/logo_cn.png';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    $tp = fopen('test.png', 'wb');
    fwrite($tp, $rawdata);
    fclose($tp);
    curl可以模仿来路,很多此类函数都可以模仿来路 这个没有难度的,但是你无法伪造ip.如果大量采集什么的该发现的人家还是要发现。
      

  11.   

    你可以把$rawdata变量echo出来看看有没有东西。
    如果有值就说明是写文件出问题了。
    如果没值就说明是curl出问题了。
      

  12.   


    试验了一下, 输出: NULL代码如下:<?php
    $url = 'http://www.google.com.hk/intl/zh-CN/images/logo_cn.png';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    $rawdata = curl_exec($ch);
    curl_close($ch);
    var_dump($rawdata);
    ?>