ID:               43498
 Comment by:       crrodriguez at suse dot de
 Reported By:      vaneay at ifrance dot com
 Status:           Open
 Bug Type:         Filesystem function related
 Operating System: linux
 PHP Version:      5.2.5
 New Comment:

Right, this does not work:

php -r
var_dump(file_exists("ftp://anonymous:[EMAIL PROTECTED]/README.MIRRORS"));


other ftp servers do work though, however, the curl library (that I
assume is right) does indeed send TYPE I before SIZE

try curl -v -I ftp://rsync.proftpd.de/README.MIRRORS

fix:

Index: ext/standard/ftp_fopen_wrapper.c
===================================================================
RCS file: /repository/php-src/ext/standard/ftp_fopen_wrapper.c,v
retrieving revision 1.85.2.4.2.4.2.2
diff -u -r1.85.2.4.2.4.2.2 ftp_fopen_wrapper.c
--- ext/standard/ftp_fopen_wrapper.c    30 Sep 2007 05:49:44 -0000     
1.85.2.4.2.4.2.2
+++ ext/standard/ftp_fopen_wrapper.c    7 Dec 2007 04:15:59 -0000
@@ -770,7 +770,7 @@
        } else {
                ssb->sb.st_mode |= S_IFDIR;
        }
-
+       php_stream_write_string(stream, "TYPE I\r\n");
        php_stream_printf(stream TSRMLS_CC, "SIZE %s\r\n",
(resource->path != NULL ? resource->path : "/"));
        result = GET_FTP_RESULT(stream);
        if (result < 200 || result > 299) {


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

[2007-12-04 20:59:00] vaneay at ifrance dot com

Description:
------------
on php 5.0 and up 
when trying to see if an ascii file exist on a ftp server tha follow
RFC
we get the error "SIZE not allowed in ASCII mode"
example with ftp server proftpd 1.3.0 and up: 
$result =
file_exists('ftp://user:[EMAIL PROTECTED]/dir/file.txt');
got always $result FALSE 
because in the server log the function file_exists() connect as the
following : 

CONNECT
LOGIN 
PASS
CWD /dir/file.txt
SIZE /dir/file.txt
550 SIZE not allowed in ASCII mode
DISCONNECT

where a normal FTP client does : 

CONNECT
LOGIN 
PASS
CWD /dir/file.txt
TYPE I
SIZE /dir/file.txt
213 93 <- got Size here
DISCONNECT

Reproduce code:
---------------
$result =
file_exists('ftp://user:[EMAIL PROTECTED]/dir/file.txt');

Expected result:
----------------
CONNECT
LOGIN 
PASS
CWD /dir/file.txt
TYPE I
SIZE /dir/file.txt
213 93 <- got Size here
DISCONNECT

Actual result:
--------------
CONNECT
LOGIN 
PASS
CWD /dir/file.txt
SIZE /dir/file.txt
550 SIZE not allowed in ASCII mode
DISCONNECT


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


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

Reply via email to