PHP中的基本文件读取问题/

时间:2011-03-27 19:24:38

标签: php xml file csv

我有一个12个XML文件,我从中提取一个CSV文件,我从中提取第1列并将值附加到tt.txt文件。

现在,我需要从这个.txt文件中提取值...每次写入数据时...... 但问题是,当我使用

  

$ contents = fread($ fd,filesize($ filename));
  fclose($ fd);
  $ delimiter =',';
  $ splitcontents = explode($ delimiter,$ contents);

每次添加tt.txt文件时,IT只会从文件的第一个值读取!

我希望你能理解这个问题。我需要的是,我希望$ contents只包含附加的新数据......而不是每次都从文件的开头读取...

有没有办法实现这一点,或者php失败了?/

  

这个问题是从TXT文件中提取 - >执行计算 - >写INTO新的txt文件。问题是我无法从中间值读取到新值.PHP总是从文件的开头读取。

3 个答案:

答案 0 :(得分:0)

我认为您需要存储最后一个文件位置。

调用filesize获取当前长度,读取文件,稍后检查文件大小是否不同(或者你可能知道其他方式,并使用fseek将光标移动到文件中,然后从那里读取。

IE:

$previousLength = 0;

// your loop when you're calling your new read function
$length = filesize($filename);
fseek($fd,$previousLength);
$contents = fread($fd,$length - $previousLength);
$previousLength = $length;

答案 1 :(得分:0)

它只读取第一个字段,因为PHP不会自动假设换行符(\n)表示新记录;你必须自己处理这个问题。

使用您已有的内容,我会执行以下操作:

$contents = fread($fd, filesize($filename));
close($fd);

/* Now, split up $contents by newline, turning this into an array, where each element
 * is, in effect, a new line in the CSV file. */
$contents = explode("\n", $contents);

/* Now, explode each element in the array, into itself. */
foreach ($contents as &$c) {
   $c = explode(",", $c);
}

将来,如果您想逐行扫描,因为您可能会通过阅读整个文件来占用太多资源,请使用fgets()。< / p>

答案 2 :(得分:0)

我在数组方面并不擅长,但听起来我需要一个关联数组(我正在用下面的代码做类似的事情。      $ lines = explode(“\ n”,$ contents);

foreach ($lines as $line) {

 $parts = explode(',', $line);
    if (count($parts) > 0) {
           $posts = array();
        $posts[] = array('name' => $parts[3],'email' => $parts[4],'phone' =>           $parts[5],'link' => $parts[6],'month' => $parts[0],'day' => $parts[1],'year' =>    $parts[2]);      }


     foreach ($posts as $post):
            $post = array_filter(array_map('trim', $post));