簡體   English   中英

從動態文本文件中提取_基本的PHP問題

[英]Extracting from a DYNAMIC text file _ basic PHP problem

我正在嘗試從txt文件中提取內容。 該文件是動態的,因為每次執行循環時,數據都會不斷追加到文件中。 在此循環中,包含了我從文件中提取內容的邏輯,如下所示...

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

即,我正在嘗試僅讀取最后一個循環中附加的數據,而不是先前寫入的數據。 示例...每次運行循環時,txt都會添加一個。

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

如果我讀取n個值,請說

114134, 144 ... 

在第一個循環中...

下次,我只需要閱讀

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

fread()在這里失敗了,而fseek沒有幫助(請參閱上面的代碼)...

我不知道為什么!

謝謝

不確定我是否正確,但是您是從同一循環中追加的文件中讀取數據?

您寫入所有單獨行的數據是否已添加到文件中? 您可以改為查看file()命令,它會將每一行讀入一個數組...然后,您可以通過先計數在先情況然后在事后在情況下,從陣列中右行讀取array_slice()。

如果您已以追加模式打開文件,則fseek手冊頁會顯示

如果您以附加(a或a +)模式打開文件,則無論文件位置如何,都將始終附加寫入文件的任何數據,並且調用fseek()的結果將是不確定的。

以下代碼進行了一些修改。 我對長度有一些問題-fread確實需要它,但是我決定使用fgets來避免它。 這將在換行符上停止,但具有方便的功能,否則將讀取文件的所有其余內容。 也許有更好的方法可以做到這一點,但這確實有效。

<?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 . "\n";
   }
   else
   {
      echo 'On iteration: ' . $i . ' no new data appended to file.' . "\n";
   }

   $previousLength += strlen($contents);  
}

fclose($fw);
fclose($fr);

?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM