ID: 21087
User updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
-Status: Feedback
+Status: Open
Bug Type: Filesystem function related
Operating System: XP
PHP Version: 4.3.0RC3
New Comment:
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";
Previous Comments:
------------------------------------------------------------------------
[2002-12-19 11:27:09] [EMAIL PROTECTED]
Keep this at feedback.
(and note that I am not [EMAIL PROTECTED] and that my previous comment
on this was my first).
------------------------------------------------------------------------
[2002-12-19 11:17:24] [EMAIL PROTECTED]
Sorry for the misunderstanding. First of all I did not know that you
were a developer working the problem. Nothing in your comment told me
that. Secondly, I have already stated that I will try to produce a
smaller script (see my original post). I just haven't had time to work
the problem. As to the buffering, without it, the full text is not
written out. It gets truncated.
------------------------------------------------------------------------
[2002-12-19 07:43:14] [EMAIL PROTECTED]
Please try and cut down the script to a complete self-contained example
that I can run here.
I'm not going to spend hours debugging a long, incomplete code
fragment.
What I'm looking for it something like this:
$fp = fopen($filename, "w");
$len = fwrite($fp, $data);
fclose($fp);
echo "Wrote $len bytes";
If that works, try adding in the flock calls.
If that works, try adding in those set_file_buffer calls
(NB: there does not seem to be a need to play with file
buffering in this case).
Please help me to help you.
------------------------------------------------------------------------
[2002-12-19 07:16:01] [EMAIL PROTECTED]
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);
}
------------------------------------------------------------------------
[2002-12-19 06:29:35] [EMAIL PROTECTED]
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 ?
------------------------------------------------------------------------
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
http://bugs.php.net/21087
--
Edit this bug report at http://bugs.php.net/?id=21087&edit=1