php:fwrite在fread之前保存,即使它在之后?

时间:2015-03-12 16:33:39

标签: php fwrite fread

这在php中很难解释。我有一个系统读取文件,按行分解数据(" \ r \ n"),然后查看这些行并提供一个新数据,而没有一行标记为$ n变量。然后它写道。

问题在于:它就像fwrite首先(当它的最后一个),然后fread(这是第一个),然后是fwrite(这是最后一个)。

如果我有一个包含31行的文件,则fread将读取该文件,就好像它已经有30行已经取出正确的行一样。然后它将再次取出正确的行,所以我最终得到一个29行文件。但是,如果我删除了fread,31行文件正确加载。如果我没有删除一行,那么它将保留所有31行。

我尽可能地简化了代码。我甚至添加了睡眠(10),希望延迟fwrite,直到fread读完为止。

当我输出一个与其应该正常工作的不同文件时,但是如果我尝试获取该输出文件并将其重命名为原始文件,我仍然会遇到同样的问题。我还将file_get_contents与file_put_contents一起使用,结果相同。

感谢您的帮助。也许你们可以告诉我哪里出错了。这是代码:

$handle = fopen($filename, 'r'); 
$Data = fread($handle, filesize($filename));
fclose($handle);

$pieces = explode("\r\n", $Data);

// $n = the line to delete

$info = '';
for($i = 0 ; $i < sizeof($pieces) ; $i++){
    if($_REQUEST['n'] == $i && $pieces[$i] != ''){
        $info .= $pieces[$i]."\r\n";
    }
}

// $filename never changes 
// $info is $Data without the specific $n line
$fp = fopen($filename, 'w+');
fwrite($fp, $info);
fclose($fp);

1 个答案:

答案 0 :(得分:0)

事实证明,这是PHP 5.3.3错误的结果。升级到PHP 5.6之后,它不再是一个问题。