Browse Source

Feature Request #7121.

Allow overwritting of files via ftp:// wrapper.
Requires context option:  $context['ftp']['overwrite'] != 0
migration/unlabaled-1.3.2
Sara Golemon 23 years ago
parent
commit
cb89565ba4
  1. 23
      ext/standard/ftp_fopen_wrapper.c

23
ext/standard/ftp_fopen_wrapper.c

@ -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;
}
}
}

Loading…
Cancel
Save