]> granicus.if.org Git - php/commitdiff
Feature Request #7121.
authorSara Golemon <pollita@php.net>
Tue, 22 Apr 2003 04:13:09 +0000 (04:13 +0000)
committerSara Golemon <pollita@php.net>
Tue, 22 Apr 2003 04:13:09 +0000 (04:13 +0000)
Allow overwritting of files via ftp:// wrapper.
Requires context option:  $context['ftp']['overwrite'] != 0

ext/standard/ftp_fopen_wrapper.c

index e088413187a9e084fbbc54a1e184cdd18237c7b6..3ec09c1fa7795cf3f05bff364f3ba7720ba966d4 100644 (file)
@@ -146,6 +146,8 @@ php_stream * php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, ch
        php_stream *reuseid=NULL;
        char *tpath, *ttpath, *hoststart=NULL;
        size_t file_size = 0;
+       zval **tmpzval;
+       int allow_overwrite = 0;
 
        tmp_line[0] = '\0';
 
@@ -312,10 +314,25 @@ php_stream * php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, char *path, ch
                        php_stream_notify_file_size(context, file_size, tmp_line, result);
                }       
        } else {
-               /* when writing file, it must NOT exist */
+               /* when writing file, it must NOT exist, unless a context option exists which allows it */
+               if (context && php_stream_context_get_option(context, "ftp", "overwrite", &tmpzval) == SUCCESS) {
+                       allow_overwrite = Z_LVAL_PP(tmpzval);
+               }
                if (result <= 299 && result >= 200) {
-                       errno = EEXIST;
-                       goto errexit;
+                       if (allow_overwrite) {
+                               /* Context permits overwritting file, 
+                                  so we just delete whatever's there in preparation */
+                               php_stream_write_string(stream, "DELE ");
+                               php_stream_write_string(stream, resource->path);
+                               php_stream_write_string(stream, "\r\n");
+                               result = GET_FTP_RESULT(stream);
+                               if (result >= 300 || result <= 199) {
+                                       goto errexit;
+                               }
+                       } else {
+                               errno = EEXIST;
+                               goto errexit;
+                       }
                }
        }