PHP读取txt每一行文本内容,并批量下载远程图片【socket方式】2018-03-06 18:23:14

( 1人已投票,[高质量] )
分享:
31.3K

将远程的图片地址保存在txt中,每行一条。

PHP获取远程文件保存到本地的方法只有四种:fopen\file_get_contents\curl\socket

下面主要介绍实测可用的通过socket方式批量获取远程文件的方法:

代码如下,注释已经很详细了,有不清楚的可以留言询问


<?php
set_time_limit(0);//无限制超时时间
ini_set('max_execution_time', '0');//两种方式防超时
$file = fopen("text.txt", "r");//同目录下的txt文件
$i=0;//记录文件行数当做文件名称
$tmpPath = "";//临时存放每一行的路径
//这是筛选图片地址的正则,有的文件格式、编码原因这块不添加会出问题,根据自己的情况,酌情修改吧
function getUrl($url){
  $tmpUrl = "";
  $regex = "/http(.*)jpg/";//匹配图片地址,看好了哦,我这儿全是jpg格式的,你是不是可以改为别的
  preg_match($regex,$url, $tmpUrl) ;
  return $tmpUrl[0];
}
while(! feof($file)){
  $tmpPath = fgets($file);//once a line till the end
  $tmpPath = getUrl($tmpPath);
  $i++;
                     
    //下面两行小控制你可能用上的,数字可以随便更改,不用的话就注释不要解开就行了
  //if($i<3) continue;//前三行就不下载了
    //if($i>5 || $i<7) continue;//5-7行的就忽略吧
    //if($i>12) break;//12行以上就退出吧,不继续读取txt了   
  getImg($tmpPath,"tmpImg/".$i.".jpg");//使用的路径要确保存在,先提前建个tmpImg文件夹吧
}
fclose($file);
//socket方式获取远程文件
//getImg("http://snowcoal.com/some_Img_Path_here","new_name.jpg")
function getImg( $url = "", $filename = "" ) {
  if(is_dir(basename($filename))) {
    echo "The Dir was not exits";
    Return false;
  }
  $url = preg_replace( '/(?:^[\'"]+|[\'"\/]+$)/', '', $url );//去除引号
  if (!extension_loaded('sockets')) return false;
  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";
  $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;
}


代码是实测可用的,不能测通的代码我不发。





头像

snowcoal
  • php
  • 文件读取
  • 远程图片
  • 批量下载
  • 下载到本地

收藏到我的私密空间

标题:PHP读取txt每一行文本内容,并批量下载远程图片【socket方式】

作者:花花世界

你暂未登录,请登录后才可收藏至您的私密空间 确认取消
雪炭网

键盘操作 更便捷 -雪炭网雪中送炭-乐趣无限