php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #10989 Wrong file writing
Submitted: 2001-05-21 10:57 UTC Modified: 2001-05-21 14:49 UTC
From: trax102 at hotmail dot com Assigned:
Status: Not a bug Package: Filesystem function related
PHP Version: 4.0 Latest CVS (2001-05-21) OS: Win2K-Win98-UNIX
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: trax102 at hotmail dot com
New email:
PHP Version: OS:

 

 [2001-05-21 10:57 UTC] trax102 at hotmail dot com
<?php
//At the end of the script "test.txt" should 
//contains "ADD1ADD2", but, as you can see,
//it will contains just "ADD2".
//Is there a work around for this problem ?

function read_file ($file_name)
{
	$file = fopen($file_name, "r");
	flock($file, 1); 
	$content = trim(fread($file, filesize($file_name)));
	flock($file, 3); 
	fclose ($file);
	return ($content);
}

function write_file ($content, $file_name)
{
	$file = fopen($file_name, "w");
	flock($file, 2);
	fwrite($file, $content);
	flock($file, 3);
	fclose ($file);
}

$filename="test.txt";
write_file("", $filename);

$content = read_file($filename);
$content .= "ADD1";
write_file($content, $filename);

$content = read_file($filename);
$content .= "ADD2";
write_file($content, $filename);
?>

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2001-05-21 11:52 UTC] trax102 at hotmail dot com
Ok, I've found the solution: simply call clearstatcache() before filesize().
 [2001-05-21 11:55 UTC] derick@php.net
This should not be closed yet, as I think it's a valid bug.

Derick
 [2001-05-21 14:49 UTC] cynic@php.net
It's not. The clearstatcache() is really needed (per manual). The result of filesize() is cached (and it's 0), so on all the calls to read_file() 0 bytes is read, hence 

$filename="test.txt";
write_file("", $filename);
# filesize() returns 0, and the result is cached

$content = read_file($filename);
# read filesize(), i. e. the cached 0 bytes. ok this time
$content .= "ADD1";
write_file($content, $filename);

$content = read_file($filename);
# read filesize(), i. e. the cached 0 bytes. this time it's not ok
# "" == $content
$content .= "ADD2";
write_file($content, $filename);

BTW I think it should be bogusified (user error).
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Tue May 06 00:01:29 2025 UTC