dongshengheng1013 2011-03-31 03:17
浏览 18
已采纳

从DYNAMIC文本文件中提取_基本的PHP问题

I am trying to extract contents from a txt file. This file is dynamic because data keeps appending to it everytime the loop is executed. Inside this loop rests my logic for extracting contents from file, as follows...

$length = filesize($filename);  
fseek($fd,$previousLength);  
$contents = fread($fd,(($length - $previousLength)));  
$previousLength = $length;  

i.e, I AM trying to read only the data that got appended, in the last loop ... and not the data that was previously written. EXAMPLE... A txt adds ONE everytime a loop is run.. i.e consider

114134, 144, 1443, 1433 ... 
(n of these written every once in loop ) ... 

If I read n values , say

114134, 144 ... 

in the first loop ...

next time, I need to read only

1443, 1443 and NOT 114134, 144 ....

fread() fails miserably here ,and fseek doesn't help ( ref. my code above) ...

I DON"T KNOW WHY !! help needed asap ..

Thanks

  • 写回答

2条回答 默认 最新

  • donglinxi1467 2011-03-31 03:55
    关注

    If you have opened the file in append mode then the man page for fseek says:

    If you have opened the file in append (a or a+) mode, any data you write to the file will always be appended, regardless of the file position, and the result of calling fseek() will be undefined.

    The following code has a few modifications. I had a few problems with the length - fread does require it, but i decided to use fgets to avoid it. This would stop on newline characters but has the handy feature of reading the entire remaining contents of the file otherwise. There may be a better way of doing this, but this does work.

    <?php
    $filename = 'loopFile.txt';
    $previousLength = 0;
    $n = 0;
    
    $fw = fopen($filename, 'a+');
    $fr = fopen($filename, 'r');
    
    for ($i=0; $i < 15; $i++)
    {
       // Put a random number of numbers into the file.
       $numberOfNumbers = rand(0, 5);
    
       for ($writeCount = 0; $writeCount < $numberOfNumbers; $writeCount++)
       {
          fwrite($fw, $i . '_' . $n++ . ', ');
       }
    
       fseek($fr, $previousLength);  
       $contents = fgets($fr);
    
       if (!empty($contents))
       {
          echo 'On iteration: ' . $i . ' read: ' . $contents . "
    ";
       }
       else
       {
          echo 'On iteration: ' . $i . ' no new data appended to file.' . "
    ";
       }
    
       $previousLength += strlen($contents);  
    }
    
    fclose($fw);
    fclose($fr);
    
    ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥23 (标签-bug|关键词-密码错误加密)
  • ¥66 比特币地址如何生成taproot地址
  • ¥20 数学建模数学建模需要
  • ¥15 关于#lua#的问题,请各位专家解答!
  • ¥15 什么设备可以研究OFDM的60GHz毫米波信道模型
  • ¥15 不知道是该怎么引用多个函数片段
  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决