ID:               48607
 Updated by:       j...@php.net
 Reported By:      karachi at mail dot ru
-Status:           Open
+Status:           Feedback
 Bug Type:         Streams related
 Operating System: FreeBSD
 PHP Version:      5.2.10
 New Comment:

Yes, we really need more info about this.


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

[2009-06-26 20:24:14] sjoerd-php at linuxonly dot nl

Thank you for your bug report.

To further investigate this bug, it would be useful if you can supply
some more information. Specifically, the data sent from and to the FTP
server would be useful. You can obtain this with a sniffer such as
tcpdump or Wireshark or maybe by configuring your FTP server. You would
be looking for something like this:

230 Anonymous access granted, restrictions apply.
SIZE test_file
550 test_file: No such file or directory
EPSV 
229 Entering Extended Passive Mode (|||3110|)
STOR /test_file

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

[2009-06-19 16:37:37] karachi at mail dot ru

Description:
------------
I tried to upload a file to ftp server using ftp wrapper functions.
Sequence of steps are: fopen, fwrite, fclose. Sometimes file uploaded
successfully and sometimes several last bytes of file didn't save.
Server reports in log file that transmission was aborted, but fwrite()
returns "true".
I found that fwrite() doesn't check ftp reply code before exiting.
That's why ftp server can receive QUIT command before it processes data
stored and close data connection as described in RFC 959: "The server
may abort data transfer if the control connections
are closed without command." If I insert sleep(1) between fwrite() and
fclose() everything works as expected.
Ftp server used: ProFTPD 1.3.2

Reproduce code:
---------------
<?php
$host = 'localhost';
$user = 'ftp';
$passwd = 'anonymous';

$f = fopen("/home/user/test/test_file", 'r') or
    die ("Unable to open file");

$context = stream_context_create(
    array(
        "ftp" => array(
            "overwrite" => true
        )
    )
);

$f1 = fopen("ftp://$host/test";, 'wb', false, $context) or
    die("Unable to open the file on ftp");

while ($str = fread($f, 1000))
{
    fwrite($f1, $str) or die("Unable to write");
}

fclose($f1);
fclose($f);
?>

Expected result:
----------------
File is successfully stored on ftp server

Actual result:
--------------
Sometimes end of the file isn't stored. It doesn't depend on the size
of the file.


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


-- 
Edit this bug report at http://bugs.php.net/?id=48607&edit=1

Reply via email to