Bug #78850 [Com]: PHP Version 7.2.3 - fseek
| From: | david dot wildermoth at yandex dot com | Date: | Fri, 22 Nov 2019 10:09:58 +0000 |
| Subject: | Bug #78850 [Com]: PHP Version 7.2.3 - fseek | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-223841@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=78850&edit=1
ID: 78850
Comment by: david dot wildermoth at yandex dot com
Reported by: david dot wildermoth at yandex dot com
Summary: PHP Version 7.2.3 - fseek
Status: Not a bug
Type: Bug
Package: Filesystem function related
Operating System: Widows 10
PHP Version: 7.2.24
Block user comment: N
Private report: N
New Comment:
Please advise the path to "fopen" and "fwrite" and I'll attempt to fix the
problem?
And if it works I'll share it as no doubt others will want to insert & no overwrite.
Previous Comments:
------------------------------------------------------------------------
[2019-11-22 09:53:13] cmb@php.net
Inserting something into a file is a very expensive operation,
since everything that follows the insertion position would have to
be moved. This is why this operation is not available; if you
need it, you have to move the existing contents yourself.
------------------------------------------------------------------------
[2019-11-22 07:55:34] david dot wildermoth at yandex dot com
Please tell me something I don't know. I want insert and no overwrite.
fseek() determines the pointer position. fopen determines truncate or append and also pointer
position. "fopen" appears to be the root of my problem, and not "fseek" as I
first thought.
https://www.php.net/manual/en/function.fopen.php
'a' Open for writing only; place the file pointer at the end of the file. If the file does
not exist, attempt to create it. In this mode, fseek() has no effect, writes are always appended.
Is it possible to have a mode similar to 'a' as follows?
Open for writing only; place the file pointer at the beginning of the file. If the file does not
exist, attempt to create it. In this mode, fseek() to be effective, writes are always appended.
If I knew where to amend coding in PHP, I could probably fix this myself.
------------------------------------------------------------------------
[2019-11-21 17:31:10] requinix@php.net
You cannot *insert* into the file. You can *overwrite*.
Open up your favorite text editor. Pull open any file you like and put the cursor somewhere in the
middle. Then turn on your editor's overwrite/overtype mode (probably Ins key) and start typing.
That's what fseek-ing into the middle and fwrite-ing will do, except it will overwrite newlines
as well.
------------------------------------------------------------------------
[2019-11-21 10:16:55] david dot wildermoth at yandex dot com
"There is no way to insert at the beginning or in the middle of a file." That statement
appears to be incorrect.
https://www.php.net/manual/en/function.fseek.php
Sets the file position indicator for the file referenced by handle. The new position, measured in
bytes from the beginning of the file, is obtained by adding offset to the position specified by
whence.
The coding that I submitted does insert in the middle of the file. The "bug" I'm
reporting inserts white space in addition to the output which is what I want to delete.
------------------------------------------------------------------------
[2019-11-21 09:54:58] requinix@php.net
If you are not appending to the end of the file then you are overwriting. That's how files
work. There is no way to insert at the beginning or in the middle of a file.
If you want to prepend your records then
a) load the entire file into memory, prepend, and write it all back out, or
b) write the new record to a temporary file, append the old file into it, and rename the new file
onto the old one
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=78850
--
Edit this bug report at https://bugs.php.net/bug.php?id=78850&edit=1