]> granicus.if.org Git - php/commitdiff
Implement move_uploaded_file() (untested)
authorZeev Suraski <zeev@php.net>
Fri, 8 Sep 2000 22:31:21 +0000 (22:31 +0000)
committerZeev Suraski <zeev@php.net>
Fri, 8 Sep 2000 22:31:21 +0000 (22:31 +0000)
ext/standard/basic_functions.c
ext/standard/file.c
ext/standard/file.h
main/SAPI.c

index 973fc3d3e4d6ccc04b1ac66626d20fed0235892a..7add16113f08eacad6200b890eb55ed7c7b8bc9a 100644 (file)
@@ -2228,6 +2228,41 @@ PHP_FUNCTION(is_uploaded_file)
        }
 }
 
+
+PHP_FUNCTION(move_uploaded_file)
+{
+       zval **path, **new_path;
+       SLS_FETCH();
+
+       if (!SG(rfc1867_uploaded_files)) {
+               RETURN_FALSE;
+       }
+
+       if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &path, &new_path)!=SUCCESS) {
+               ZEND_WRONG_PARAM_COUNT();
+       }
+       convert_to_string_ex(path);
+       convert_to_string_ex(new_path);
+
+       if (!zend_hash_exists(SG(rfc1867_uploaded_files), Z_STRVAL_PP(path), Z_STRLEN_PP(path)+1)) {
+               RETURN_FALSE;
+       }
+
+       if (rename(Z_STRVAL_PP(path), Z_STRVAL_PP(new_path))==0) {
+               RETURN_TRUE;
+       }
+
+       if (php_copy_file(Z_STRVAL_PP(path), Z_STRVAL_PP(new_path))==SUCCESS) {
+               unlink(Z_STRVAL_PP(path));
+               RETURN_TRUE;
+       }
+
+       php_error(E_WARNING, "Unable to move '%s' to '%s'", Z_STRVAL_PP(path), Z_STRVAL_PP(new_path));
+
+       RETURN_FALSE;
+}
+
+
 /*
  * Local variables:
  * tab-width: 4
index 06932de9619533a9ba35b4d6863839ecfe43db0e..e2df54c91ee4e687a5cf873abd7c2ff7229dc955 100644 (file)
@@ -1731,8 +1731,6 @@ PHP_FUNCTION(fstat)
 PHP_FUNCTION(copy)
 {
        pval **source, **target;
-       char buffer[8192];
-       int fd_s,fd_t,read_bytes;
        PLS_FETCH();
        
        if (ARG_COUNT(ht) != 2 || zend_get_parameters_ex(2, &source, &target) == FAILURE) {
@@ -1746,40 +1744,56 @@ PHP_FUNCTION(copy)
                RETURN_FALSE;
        }
        
+       if (php_copy_file(Z_STRVAL_PP(source), Z_STRVAL_PP(target))==SUCCESS) {
+               RETURN_TRUE;
+       } else {
+               RETURN_FALSE;
+       }
+}
+
+/* }}} */
+
+
+PHPAPI int php_copy_file(char *src, char *dest)
+{
+       char buffer[8192];
+       int fd_s,fd_t,read_bytes;
+
 #ifdef PHP_WIN32
-       if ((fd_s=V_OPEN((Z_STRVAL_PP(source),O_RDONLY|_O_BINARY)))==-1) {
+       if ((fd_s=V_OPEN((src,O_RDONLY|_O_BINARY)))==-1) {
 #else
-       if ((fd_s=V_OPEN((Z_STRVAL_PP(source),O_RDONLY)))==-1) {
+       if ((fd_s=V_OPEN((src,O_RDONLY)))==-1) {
 #endif
-               php_error(E_WARNING,"Unable to open '%s' for reading:  %s", Z_STRVAL_PP(source), strerror(errno));
-               RETURN_FALSE;
+               php_error(E_WARNING,"Unable to open '%s' for reading:  %s", src, strerror(errno));
+               return FAILURE;
        }
 #ifdef PHP_WIN32
-       if ((fd_t=V_OPEN((Z_STRVAL_PP(target),_O_WRONLY|_O_CREAT|_O_TRUNC|_O_BINARY,_S_IREAD|_S_IWRITE)))==-1){
+       if ((fd_t=V_OPEN((dest,_O_WRONLY|_O_CREAT|_O_TRUNC|_O_BINARY,_S_IREAD|_S_IWRITE)))==-1) {
 #else
-       if ((fd_t=V_CREAT(Z_STRVAL_PP(target),0777))==-1) {
+       if ((fd_t=V_CREAT((dest,0777))==-1) {
 #endif
-               php_error(E_WARNING,"Unable to create '%s':  %s", Z_STRVAL_PP(target), strerror(errno));
+               php_error(E_WARNING,"Unable to create '%s':  %s", dest, strerror(errno));
                close(fd_s);
-               RETURN_FALSE;
+               return FAILURE;
        }
 
        while ((read_bytes=read(fd_s,buffer,8192))!=-1 && read_bytes!=0) {
                if (write(fd_t,buffer,read_bytes)==-1) {
-                       php_error(E_WARNING,"Unable to write to '%s':  %s", Z_STRVAL_PP(target), strerror(errno));
+                       php_error(E_WARNING,"Unable to write to '%s':  %s", dest, strerror(errno));
                        close(fd_s);
                        close(fd_t);
-                       RETURN_FALSE;
+                       return FAILURE;
                }
        }
        
        close(fd_s);
        close(fd_t);
+       return SUCCESS;
+}      
+
+
 
-       RETVAL_TRUE;
-}
 
-/* }}} */
 /* {{{ proto int fread(int fp, int length)
    Binary-safe file read */
 
index 636499e23cda7ee5ccb7a3a82e7ce24888c6f30d..0107631d1deddc9bc5c635338790715f9eb5d0e9 100644 (file)
@@ -71,5 +71,6 @@ PHPAPI int php_file_le_fopen(void);
 PHPAPI int php_file_le_popen(void);
 PHPAPI int php_file_le_socket(void);
 PHPAPI int php_file_le_uploads(void);
+PHPAPI int php_copy_file(char *src, char *dest);
 
 #endif /* FILE_H */
index cee1f77876fafd74e6a9f043486889762f0bb2b3..a24ca9aaf83922fad332d8e2cd94453624a0d2ae 100644 (file)
@@ -247,7 +247,7 @@ SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len SLS_DC)
        if (*charset && strncmp(*mimetype, "text/", 5) == 0 && strstr(*mimetype, "charset=") == NULL) {
                newlen = len + (sizeof(";charset=")-1) + strlen(charset);
                newtype = emalloc(newlen + 1);
-               PHP_STRLCPY(newtype, *mimetype, newlen + 1, len);
+               PHP_STRLCPY(newtype, *mimetype, newlen + 1, len);
                strlcat(newtype, ";charset=", newlen + 1);
                if (*mimetype != NULL) {
                        efree(*mimetype);