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