#21087 [Opn]: Rewriting file no longer works
| From: | gfraley5 at earthlink dot net | Date: | Thu, 19 Dec 2002 13:16:02 +0000 |
| Subject: | #21087 [Opn]: Rewriting file no longer works | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-28022@lists.php.net to get a copy of this message | ||
ID: 21087
User updated by: gfraley5@earthlink.net
Reported By: gfraley5@earthlink.net
Status: Open
Bug Type: Filesystem function related
Operating System: XP
PHP Version: 4.3.0RC3
New Comment:
I'm running Apache 1.3.27. I haven't tested it under *nix. As far as
a code snippet, I will assume that it is in this code, somewhere:
if ($admin_from_web==true) {
$row = 0;
$insert_msg = '';
$fp = fopen("$path_to_gb",'r') or die("$unable_to_access_file_msg
$path_to_gb");
set_file_buffer($fp,$buffersize);
flock($fp,1);
$num = 16;
for ($i=0;$i<$num;$i++) {
$j = $i+1;
$head_array[$i] = ${"col$j"};
}
while ($data = fgetcsv($fp,$csv_buffer_size,",")) {
$row++;
if ($row<2) continue;
$new_msg = "";
if ($data[0]==$msgid) {
if (!empty($update)) {
reset ($HTTP_POST_VARS);
while (list ($key, $val) = each ($HTTP_POST_VARS)) {
$found=false;
for ($i=0;$i<count($head_array);$i++) {
if ($key==$head_array[$i]) {
$rec[$i] = $val;
$found=true;
}
if ($found) break;
}
}
$msg = $label_name."$data[4] (ip = ".getenv(REMOTE_ADDR).") -
$head_array[0]:$msgid ".$on." ".date($date_format)." $at
".date($time_format)."\n";
for ($c=0;$c<$num;$c++) {
if ($c==0) $comma="";
else $comma=",";
if ($c==13&&$row>1) {
$rec[$c] = htmlspecialchars($rec[$c],ENT_QUOTES);
$rec[$c] = str_replace("&#","&#",$rec[$c]);
$new_msg .= $comma."\"$rec[$c]\"";
}
elseif ($c<4) $new_msg .= $comma."$rec[$c]";
else $new_msg .= $comma."\"$rec[$c]\"";
if (chop($data[$c])!=chop($rec[$c])) {
$msg .= "$head_array[$c]: [$data[$c]]\n\n$head_array[$c]:
[$rec[$c]]\n\n\n";
}
}
$new_msg .= "\n";
if ($admin_email_advice_on_gb_edit && !empty($admin_email_address))
{
$to = "$admin_email_address,$admin_email_address_addl";
$subject = "$admin_email_subject_on_gb_edit";
@mail($to, $subject, "$msg","From: $admin_email_address") ;
}
}
}
else {
for ($c=0;$c<$num;$c++) {
$val = $data[$c];
if ($c==0) $comma="";
else $comma=",";
if ($c==13&&$row>1) $new_msg .= $comma."\"$val\"";
elseif ($c<4&&$row>1) $new_msg .= $comma."$val";
else $new_msg .= $comma."\"$val\"";
}
$new_msg .= "\n";
}
if (!empty($new_msg)) $newgb[] = $new_msg;
}
flock($fp,3);
fclose($fp);
unset($delete);
unset($update);
$buffersize = round(filesize($path_to_gb)*1.5);
$fp = fopen("$path_to_gb",'w') or die("$unable_to_access_file_msg
$path_to_gb");
set_file_buffer($fp,$buffersize);
flock($fp,1);
for ($i=0;$i<count($newgb);$i++) {
if ($i==0) $prefx = "<? Header(\"HTTP/1.0 403 Forbidden\");exit;
?>\n";
else $prefx = "";
fwrite($fp,$prefx.$newgb[$i]);
}
flock($fp,3);
fclose($fp);
}
Previous Comments:
------------------------------------------------------------------------
[2002-12-19 06:29:35] mira-junk@cekit.cz
I've read similar bug report from several of our users (we have free
hosting server with aprox. 60,000 users, currently running latest RC of
php-4.3.0 with apache-2.0.43), but I've not been able to reproduce it.
Can you please paste here part of your code ?
------------------------------------------------------------------------
[2002-12-18 18:58:42] gfraley5@earthlink.net
This is just a heads up. I can reproduce it but can't figure out why.
I have a guestbook script that I wrote (KISGB) and it works perfectly
under all prior to 4.3.x versions. However, 4.3.0RC3 (don't know about
previous RC's) will not recreate the file. Basically the script is
trying to rewrite a configuration file. It fails every time (writing
out a file of zero length) but I can't find anything on the logs. As
soon as I restore a previous non 4.2.3x release, it works flawlessly.
I will continue to try to produce a smaller script to replicate it, but
it will fail 100% of the time under 4.3.0. I will also add that the
script is a phpNUKE module, so it is operating within that framework.
It is a flat file, not a MySQL table.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=21087&edit=1