ID: 32889
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
Status: Closed
Bug Type: Documentation problem
PHP Version: Irrelevant
New Comment:
The file pointer is not changed at all by PHP when you truncate.
This is consistent with ANSI ftruncate (man ftruncate).
You are responsible for seeking explicitly if you require it.
Previous Comments:
------------------------------------------------------------------------
[2005-04-29 16:18:32] [EMAIL PROTECTED]
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation
better.
"The file pointer is changed only in append mode. In write mode,
additional fseek() call is needed."
------------------------------------------------------------------------
[2005-04-29 13:04:11] [EMAIL PROTECTED]
Something like "Warning: Truncate doesn't change position of the file
pointer. Adjust the pointer with fseek to write to the end of the file
after truncate operation in modes other than "a" and "a+"." ?
Examples:
<?php
$fh = fopen("file.txt","w+");
fwrite($fh, "newfile"); // file contains string 'newfile'
ftruncate($fh, 3);
fseek($fh, 0, SEEK_END);
fwrite($fh, "contents"); // file contains 'newcontents'
fclose($fh);
?>
<?php
$fh = fopen("file.txt","w+");
fwrite($fh, "newfile"); // file contains string 'newfile'
ftruncate($fh, 3);
fwrite($fh, "contents"); // file contains 'new contents'
fclose($fh);
?>
------------------------------------------------------------------------
[2005-04-29 12:22:17] [EMAIL PROTECTED]
"The file pointer is not changed."
(c) man ftruncate
------------------------------------------------------------------------
[2005-04-29 12:12:57] [EMAIL PROTECTED]
On the second thought it doesn't seem like a feature.
------------------------------------------------------------------------
[2005-04-29 11:36:13] [EMAIL PROTECTED]
Description:
------------
Note or warning here?
http://www.php.net/manual/en/function.ftruncate.php
Reproduce code:
---------------
<?php
// truncate doesn't move the file pointer to the end of the file
$flog = fopen("text.txt", "w+");
fwrite($flog, "veeery veeery long string");
fseek($flog, -2, SEEK_END);
ftruncate($flog, 6);
fwrite($flog, "shortstr");
fclose($flog);
?>
Expected result:
----------------
0000000000: 76 65 65 65 72 79 20 73 │ 68 6F 72 74 73 74 72
veeery shortstr
Actual result:
--------------
0000000000: 76 65 65 65 72 79 20 00 │ 00 00 00 00 00 00 00 00
veeery
0000000010: 00 00 00 00 00 00 00 73 │ 68 6F 72 74 73 74 72
shortstr
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=32889&edit=1