ID:               21087
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Critical
+Status:           Bogus
 Bug Type:         Filesystem function related
 Operating System: XP
 PHP Version:      4.3.0RC3
 New Comment:

Your script is broken :)
It's taken a few hours for us to realize this and it's pretty easy to
overlook.

You are locking the file for shared access and then writing to it. 
This doesn't make sense, because you should really be using an
exclusive lock (LOCK_EX) to do this.

Under unix systems, flock is an advisory lock, meaning that processes
can ignore the lock status if they wish.

Under windows, the locking is enforced by the OS which forbids the
write access, hence the zero-size file.

Additionally, the win32 docs state that closing a file that was locked
(but not unlocked) leads to undefined behaviour, so that flock($fp,
LOCK_UN) call *is* required for win32.


Previous Comments:
------------------------------------------------------------------------

[2002-12-22 08:05:42] [EMAIL PROTECTED]

Update summary.
LOCK_EX works fine.
Additionally, writing to the file prior to obtaining the lock also
works fine, but defeats the purpose of the lock.

------------------------------------------------------------------------

[2002-12-21 18:41:37] [EMAIL PROTECTED]

Just a further note.  It also/still errors on RC4.  Also, if you use
flock($fp,2) instead of flock($fp,1) it works.

------------------------------------------------------------------------

[2002-12-19 22:27:29] [EMAIL PROTECTED]

Small note, the 2nd flock (flock($fp,3);) is entirely optional. The
problem is occures if prior to write the LOCK_SH is set on the file,
the problem does not happen if LOCK_EX is used.

------------------------------------------------------------------------

[2002-12-19 21:21:56] [EMAIL PROTECTED]

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";

------------------------------------------------------------------------

[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).

------------------------------------------------------------------------

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

Reply via email to