<?php
$conn = mysql_connect("127.0.0.1","root","123456") or die("无法连接数据库");
@mysql_query("SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary",$conn);
mysql_select_db("s517",$conn) or die("无法连接数据库");
global $db;function getImage($url, $filename="") {
if(!$url) return false;if(!$filename) {
  $ext=strrchr(strtolower($url),".") ;
  if($ext!=".gif" && $ext!=".jpg" && $ext!=".png") return false;
  $str=explode('/',$url) ;
  $filename=$str[count($str)-1] ;
}ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$fp2=@fopen($filename, "a") ;
fclose($fp2) ;
return $filename;
}//批量下载 $result = mysql_query("SELECT itemid, thumb FROM table LIMIT 0 , 300");
while($row = mysql_fetch_array($result)) {
getImage($row["thumb"],"");
echo $row["itemid"]."输出成功";
  }
?>
table里面的thumb是采集的远程图片路径
我用这个函数下载下来的图片都是0字节。

解决方案 »

  1.   

    先去一两张看看有什么,而且你的代码里没有输出 getImage()的结果啊.    $result = mysql_query("SELECT itemid, thumb FROM table LIMIT 0 , 1");
        while($row = mysql_fetch_array($result)) {
        echo getImage($row["thumb"],"")."<br>";
        echo $row["itemid"]."输出成功<br>";
         }
      

  2.   

    谢楼上两位。试过sleep,还是不行。换了另外一种写法。网上找的,稍微改了一下。帖出来一下。
    <?php
    $conn = mysql_connect("127.0.0.1","root","123456") or die("无法连接数据库");
    @mysql_query("SET character_set_connection=utf8, character_set_results=utf8, character_set_client=binary",$conn);
    mysql_select_db("s517",$conn) or die("无法连接数据库");
    global $db;function check_url($url){
    return preg_match("/^(http|ftp)(:\/\/)([a-zA-Z0-9-_]+[\.\/]+[\w\-_\/]+.*)+$/i", $url);
    }function down($url,$folder,$filename){
    error_reporting(0);
    set_time_limit(0);
    $argv[1] = $url;
    $argv[2] = $folder;
    //无参数则给出提示
    if (empty($argv[1])){
      echo "用法: ". $argv[1] ." 地址 [目标]<br>\r\n";
      return 0;
    }//设置获取基本变量
    $url = $argv[1];
    echo "<p><b>下载地址:</b> ".$url."<br />";
    $save_path = $argv[2] ? $argv[2] : "./";
    $file_name = $filename;
    $localfile = $save_path.$file_name;
    echo "<b>文件路径:</b> ".$localfile."<br />";
    //检查变量
    if (!check_url($url)){
      echo("<b>错误:下载地址 </b>". $url ." <b>无效.</b><br>\r\n");
    return 0;
    }
    if (file_exists($localfile)){
      echo ("<b>错误:本地存在 </b>". $localfile ." <b>文件.</b><br>\r\n");
      return 0;
    }
    // 打开远程文件
    $fp = fopen($url, "rb");
    if (!$fp){
      echo("<b>错误:下载</b>". $url ." <b>失败.</b><br>\r\n");
    return 0;
    }//打开本地文件
    $sp = fopen($localfile, "wb");
    if (!$sp){
      echo("<b>错误:打开本地文件</b>". $localfile ." <b>失败.</b><br>\r\n");
    return 0;
    }//下载远程文件
    echo "下载中,请等待...\r\n";
    while (!feof($fp)){
      $tmpfile .= fread($fp, 512);
    }//保存文件到本地
    fwrite($sp, $tmpfile);
    fclose($fp);
    fclose($sp);
    echo "下载文件 ". $file_name ." 成功!<br>\r\n";return 1;}$folder = "attachment/";          //要保存文件的本地目录
      if(!is_dir($folder))
        mkdir($folder,0777);

    $result = mysql_query("SELECT itemid, thumb FROM s517_sell");
    while($row = mysql_fetch_array($result)) {
     if(strlen($row["thumb"])>6)
        {
        $fileext= array_pop(explode(".", $row["thumb"]));  //获取后缀名'
        $newfilename = md5($row["thumb"]).".".$fileext;    //文件名后加入后缀'
        
        //echo $urlarr[$i],"-->",$newfilename,"<br>\r\n";
        
        if(down($row["thumb"],$folder,$newfilename))
        {
          //echo "下载完成:",$urlarr[$i],"-->",$newfilename,"</p>\r\n";
        }
      }
    }
    ?>
    如果数据太多需要加超时。
      

  3.   

    直接file_get_content file_put_content