]> granicus.if.org Git - php/commitdiff
New FTP test from Nathaniel McHugh
authorZoe Slattery <zoe@php.net>
Wed, 17 Dec 2008 12:35:53 +0000 (12:35 +0000)
committerZoe Slattery <zoe@php.net>
Wed, 17 Dec 2008 12:35:53 +0000 (12:35 +0000)
ext/ftp/tests/ftp_get_basic.phpt [new file with mode: 0644]
ext/ftp/tests/server.inc

diff --git a/ext/ftp/tests/ftp_get_basic.phpt b/ext/ftp/tests/ftp_get_basic.phpt
new file mode 100644 (file)
index 0000000..9e2dfb0
--- /dev/null
@@ -0,0 +1,39 @@
+--TEST--
+FTP ftp_get file for both binary and ASCII transfer modes
+--CREDITS--
+Nathaniel McHugh 
+--SKIPIF--
+<?php
+require 'skipif.inc';
+?>
+--FILE--
+<?php
+require 'server.inc';
+
+$ftp = ftp_connect('127.0.0.1', $port);
+if (!$ftp) die("Couldn't connect to the server");
+
+var_dump(ftp_login($ftp, 'user', 'pass'));
+
+//test simple text transfer
+$tmpfname = tempnam(".", "ftp_test");
+var_dump(ftp_get($ftp, $tmpfname ,'a story.txt', FTP_ASCII));
+echo file_get_contents($tmpfname);
+
+//test binary data transfer
+$tmpfname = tempnam(".", "ftp_test");
+var_dump(ftp_get($ftp, $tmpfname, 'binary data.bin', FTP_BINARY));
+var_dump(urlencode(file_get_contents($tmpfname)));
+unlink($tmpfname);
+
+//test non-existant file request 
+ftp_get($ftp, $tmpfname ,'a warning.txt', FTP_ASCII);
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+For sale: baby shoes, never worn.
+bool(true)
+string(21) "BINARYFoo%00Bar%0D%0A"
+
+Warning: ftp_get(): a warning: No such file or directory  in %sftp_get_basic.php on line %d
index bf11257af0cef77d0eb06de39b4d67f75c7b3503..76198c23d02fa8c2b8e094535e0ea23deaf2bd20 100644 (file)
@@ -136,7 +136,6 @@ $cwd = '/';
 $num_bogus_cmds = 0;
 
 while($buf = fread($s, 4098)) {
-
        if (!empty($bogus)) {
                fputs($s, "502 Command not implemented (".$num_bogus_cmds++.").\r\n");
 
@@ -262,7 +261,29 @@ while($buf = fread($s, 4098)) {
                                fputs($s, "550 No file named \"{$matches [1]}\"\r\n");
                                break;
                }
-       }       
+         }elseif (preg_match('/^RETR ([\w\h]+)/', $buf, $matches)) {
+                if (!$fs = stream_socket_client("tcp://$host:$port")) {
+                             fputs($s, "425 Can't open data connection\r\n");
+                             continue;
+                        }
+                       switch($matches[1]){
+                        case "a story":
+                            fputs($s, "150 File status okay; about to open data connection.\r\n");
+                           fputs($fs, "For sale: baby shoes, never worn.\r\n");
+                            fputs($s, "226 Closing data Connection.\r\n");
+                        break;
+                       case "binary data":
+                            fputs($s, "150 File status okay; about to open data connection.\r\n");
+                            $transfer_type = $ascii? 'ASCII' : 'BINARY' ;
+                            fputs($fs, $transfer_type."Foo\0Bar\r\n");
+                            fputs($s, "226 Closing data Connection.\r\n");
+                       break;
+                       default:
+                            fputs($s, "550 {$matches[1]}: No such file or directory \r\n");
+                        break;
+                       }       
+                       fclose($fs);
+          }
        else {
                fputs($s, "500 Syntax error, command unrecognized.\r\n");
                dump_and_exit($buf);