[英]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()。
如果您以附加(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.