PHP采集类Snoopy抓取图片实例(2)

在使用php抓取网页:内容、图片、链接的时候,我觉得最重要的还是正则(根据抓取的内容和指定的规则获取想要的数据),思路其实都比较简单,用到的方法也并不多,也就那几个(而且抓取内容还是直接调用别人写好的类中的方法就可以了)

但之前想过的是php似乎并没有实现如下的方法,比如一个文件中有N行(N很大),需要将其中符合规则的行内容进行替换,如第3行是aaa需要转成bbbbb。一般的需要修改文件时的常见做法:

1.一次读取整个文件(或是逐行读取),然后使用临时文件进行保存最终转换后的结果,再替换原始文件

2.逐行读取,使用fseek控制文件指针的位置,然后fwrite写入

方案1在文件较大时,一次读取不可取(逐行读取,然后写入临时文件再替换原始文件效率感觉也不高),方案2则在被替换的字符串长度小于等于目标值时没问题,但超过了则会有问题,它会“越界”,将下一行的数据也打乱了(不能像JavaScript中有“选区”的概念,使用新的内容进行替换)。

下面是使用方案2做试验的代码:

复制代码 代码如下:


<?php
$mode = "r+";
$filename = "d:/file.txt";
$fp = fopen($filename, $mode);
if ($fp) {
 $i = 1;
 while (!feof($fp)) {
    $str = fgets($fp);
    echo $str;
    if ($i == 1) {
      $len = strlen($str);
      fseek($fp, -$len, SEEK_CUR);//指针向前移动
      fwrite($fp, "123");
    }
    i++;
  }
  fclose($fp);
}
?>

先读取一行,此时文件指针其实是指到下一行开头,使用fseek将文件指针回移到上一行起始位置,然后使用fwrite进行替换操作,正因为是替换操作,在不指定长度的情况下,它把影响到下一行的数据,而我想要的是只想针对这一行进行操作,例如删除这一行或是整行只替换为一个1,上面的例子达不到要求,或许是我还没有找到合适的方法…

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/be00deee3bd085e08d1578caaf16b390.html