Re: Overwriting specific lines in text files without rewriting the whole thing.
| From: | John Biesnecker | Date: | Mon, 26 Jun 2000 23:21:13 +0000 |
| Subject: | Re: Overwriting specific lines in text files without rewriting the whole thing. | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-3242@lists.php.net to get a copy of this message | ||
Thanks all for your ideas and suggestions. I've decided to implement it as
a dbm... works pretty well, too.
----- Original Message -----
From: Carroll Barrett <cbarrett@inalt.com>
To: <php-general@lists.php.net>
Sent: Monday, June 26, 2000 5:43 PM
Subject: Re: [PHP-GENERAL] Overwriting specific lines in text files without
rewriting the whole thing.
> John,
>
> Suggestion #2:
>
> $length=9; // largest possible # of digits in counter (set to
> what you want)
> $id=$unique_id_for_this_page; // first id should be 0
> $fp=fopen("/path/to/counterfile","+r");
> fseek($fp,$length * $id); // position to counter for this page
> flock($fp,2); // exclusive lock on file
> $count=fread($fp,$length); // get it
> fseek($fp,$length * $id); // re-position
> fwrite($fp,sprintf("%${length}d",$count + 1); // put new counter
> back, hopefully with a fixed length
> flock($fp,3); // release lock
> fclose($fp);
>
> Assumptions:
> 1) You can assign a unique integer each page
> 2) Counter file exists and is filled with enough zeros to allow
> for all counters. If you have 1100 pages, then you must have at
> least 9 * 1100 = 9900 zeros.
> 3) flock($fp,2) will wait for a lock if someone else has locked
> the file
> 4) All my syntax is correct (a drastic assumption, especially on
> the fwrite() line)
>
> HTH again,
> Carroll Barrett
>
> -----Original Message-----
> From: John Biesnecker <amraam@ao.net>
> To: php-general@lists.php.net <php-general@lists.php.net>
> Date: Monday, June 26, 2000 4:19 PM
> Subject: Re: [PHP-GENERAL] Overwriting specific lines in text
> files without rewriting the whole thing.
>
>
> >Unfortunately, I have something like 1100 pages, if you count
> all of the
> >dynamically generated pages... I'm sure it's possible, and I
> think I could
> >do it in C or something, but I've looked over the PHP filesystem
> functions a
> >bunch and can't see it...
> >
> >/s/ John
> >
> >----- Original Message -----
> >From: Carroll Barrett <cbarrett@inalt.com>
> >To: <php-general@lists.php.net>
> >Sent: Monday, June 26, 2000 5:02 PM
> >Subject: Re: [PHP-GENERAL] Overwriting specific lines in text
> files without
> >rewriting the whole thing.
> >
> >
> >> John,
> >>
> >> You might consider having a separate counter file for each
> page,
> >> if you don't have too many pages.
> >>
> >> Regards,
> >> Carroll Barrett
> >>
> >> -----Original Message-----
> >> From: John Biesnecker <amraam@ao.net>
> >> To: php-general@lists.php.net <php-general@lists.php.net>
> >> Date: Monday, June 26, 2000 3:48 PM
> >> Subject: [PHP-GENERAL] Overwriting specific lines in text
> files
> >> without rewriting the whole thing.
> >>
> >>
> >> I have created rather simple file-based page hit counter for
> my
> >> site (because I can't use SQL or anything else). Currently I
> am
> >> reading the entire thing into an array using file(), finding
> the
> >> correct line, editing it and writing the entire thing back
> into a
> >> file.
> >>
> >> After a few weeks of content development, however, my counter
> >> data file has gotten very large, and reading and writing the
> >> entire file is beginning to take a noticable amount of time.
> I'm
> >> already sorting the file so the most accessed pages are on
> top,
> >> hoping to reduce time needed to find the correct entry.
> >>
> >> I'm wondering if there is a way that while reading the file
> line
> >> by line and I can alter a single line and write it back to the
> >> file without disturbing the rest of the lines and then exit.
> >> Also, if there is, will I see any performance improvement
> worth
> >> the code rewrite.
> >>
> >> Thanks.
> >>
> >>
> >>
> >> --
> >> PHP General Mailing List (http://www.php.net/)
> >> To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net
> >> For additional commands, e-mail:
> php-general-help@lists.php.net
> >> To contact the list administrators, e-mail:
> php-list-admin@lists.php.net
> >>
> >
> >
> >--
> >PHP General Mailing List (http://www.php.net/)
> >To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net
> >For additional commands, e-mail: php-general-help@lists.php.net
> >To contact the list administrators, e-mail:
> php-list-admin@lists.php.net
> >
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, e-mail: php-general-unsubscribe@lists.php.net
> For additional commands, e-mail: php-general-help@lists.php.net
> To contact the list administrators, e-mail: php-list-admin@lists.php.net
>