这在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);
答案 0 :(得分:0)
事实证明,这是PHP 5.3.3错误的结果。升级到PHP 5.6之后,它不再是一个问题。