|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-12-18 18:58 UTC] gfraley5 at earthlink dot 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. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 12:00:02 2025 UTC |
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); }It appears to be the flock() call. This fails. However, if you comment out the flock() calls it works. $filename = "c:/phptest.txt"; $data = "This is test text"; $fp = fopen("$filename",'w'); flock($fp,1); $len = fwrite($fp,$data); flock($fp,3); fclose($fp); echo "Wrote $len bytes";