Bug #10989 Updated: Wrong file writing
| From: | cynic@php.net | Date: | Mon, 21 May 2001 12:49:17 +0000 |
| Subject: | Bug #10989 Updated: Wrong file writing | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-56040@lists.php.net to get a copy of this message | ||
ID: 10989
Updated by: cynic
Reported By: trax102@hotmail.com
Old-Status: Analyzed
Status: Bogus
Bug Type: Filesystem function related
Operating system:
PHP Version: 4.0 Latest CVS (2001-05-21)
Assigned To:
Comments:
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).
Previous Comments:
---------------------------------------------------------------------------
[2001-05-21 11:55:50] derick@php.net
This should not be closed yet, as I think it's a valid bug.
Derick
---------------------------------------------------------------------------
[2001-05-21 11:52:14] trax102@hotmail.com
Ok, I've found the solution: simply call clearstatcache() before filesize().
---------------------------------------------------------------------------
[2001-05-21 10:57:52] trax102@hotmail.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);
?>
---------------------------------------------------------------------------
ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=10989&edit=2