Changeset 216


Ignore:
Timestamp:
06/16/10 22:11:26 (20 months ago)
Author:
lars
Message:

Support for large files

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r125 r216  
     1php-mogilefs 0.7.6: 
     2    * Support for large files (Alayn Gortazar <alayn@irontec.com>) 
     3 
    14php-mogilefs 0.7.5 beta3: 
    25    * New API: MogileFs::isConnected() 
  • trunk/mogilefs.c

    r214 r216  
    469469/* }}} */ 
    470470 
    471 PHPAPI char *mogilefs_file_to_mem(char *filename, int *file_buffer_len TSRMLS_DC) /* {{{ */ 
    472 { 
    473     php_stream *stream; 
    474     char *data = NULL; 
    475  
    476     if ((stream = php_stream_open_wrapper(filename, "rb", USE_PATH | ENFORCE_SAFE_MODE, NULL)) != NULL) { 
    477         *file_buffer_len = php_stream_copy_to_mem(stream, &data, PHP_STREAM_COPY_ALL, 0); 
    478         if (*file_buffer_len == 0) { 
    479             data = estrdup(""); 
    480         } 
    481         php_stream_close(stream); 
    482     } 
    483     return data; 
    484 } 
    485 /* }}} */ 
    486  
    487471PHPAPI char *mogilefs_create_open(MogilefsSock *mogilefs_sock, const char * const key,  const char * const class, int multi_dest TSRMLS_DC) /* {{{ */ 
    488472{ 
     
    671655    ne_session *sess; 
    672656    ne_request *req; 
    673     int multi_dest = 1, use_file = 1, key_len, class_len, file_buffer_len, filename_len, ret, alloc_file = 0, alloc_url = 0; 
     657    int multi_dest = 1, use_file = 1, key_len, class_len, file_buffer_len, filename_len, ret, alloc_file = 0, alloc_url = 0, fd = 0; 
    674658    char *key = NULL, *class = NULL, *file_buffer, *filename, *close_request; 
     659    FILE *f; 
    675660 
    676661    if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
     
    688673    } 
    689674 
     675    if ((close_request = mogilefs_create_open(mogilefs_sock, key, class, multi_dest TSRMLS_CC)) == NULL) { 
     676        RETVAL_FALSE; 
     677        goto end; 
     678    } 
     679 
     680    if (mogilefs_get_uri_path(close_request, &url TSRMLS_CC) < 0) { 
     681        RETVAL_FALSE; 
     682        goto end; 
     683    } 
     684 
     685    alloc_url = 1; 
     686 
     687    if (url->port == 0) { 
     688        url->port = ne_uri_defaultport(url->scheme); 
     689    } 
     690    if (url->scheme == NULL) { 
     691        url->scheme = "http"; 
     692    } 
     693 
     694    if ((sess = ne_session_create(url->scheme, url->host, url->port)) == NULL) { 
     695        RETVAL_FALSE; 
     696        goto end; 
     697    } 
     698 
     699    ne_set_read_timeout(sess, (int) MOGILEFS_DAV_SESSION_TIMEOUT); 
     700 
    690701    if (use_file) { 
    691         if ((file_buffer = mogilefs_file_to_mem(filename, &file_buffer_len TSRMLS_CC)) == NULL) { 
    692             RETURN_FALSE; 
    693         } 
    694         alloc_file = 1; 
     702        f = php_stream_open_wrapper_as_file(filename, "rb", USE_PATH | ENFORCE_SAFE_MODE, NULL); 
     703        if (f != NULL) { 
     704            fd = fileno(f); 
     705            ret = ne_put(sess, url->path, fd); 
     706            close(fd); 
     707        } else { 
     708            RETVAL_FALSE; 
     709            goto end; 
     710        } 
    695711    } else { 
    696712        file_buffer = filename; 
    697713        file_buffer_len = filename_len; 
    698     } 
    699  
    700     if ((close_request = mogilefs_create_open(mogilefs_sock, key, class, multi_dest TSRMLS_CC)) == NULL) { 
    701         RETVAL_FALSE; 
    702         goto end; 
    703     } 
    704  
    705     if (mogilefs_get_uri_path(close_request, &url TSRMLS_CC) < 0) { 
    706         RETVAL_FALSE; 
    707         goto end; 
    708     } 
    709  
    710     alloc_url = 1; 
    711  
    712     if (url->port == 0) { 
    713         url->port = ne_uri_defaultport(url->scheme); 
    714     } 
    715     if (url->scheme == NULL) { 
    716         url->scheme = "http"; 
    717     } 
    718  
    719     if ((sess = ne_session_create(url->scheme, url->host, url->port)) == NULL) { 
    720         RETVAL_FALSE; 
    721         goto end; 
    722     } 
    723  
    724     ne_set_read_timeout(sess, (int) MOGILEFS_DAV_SESSION_TIMEOUT); 
    725     req = ne_request_create(sess, "PUT", url->path); 
    726     ne_set_request_body_buffer(req, file_buffer, file_buffer_len); 
    727     ret = ne_request_dispatch(req); 
    728  
    729     ne_request_destroy(req); 
     714        req = ne_request_create(sess, "PUT", url->path); 
     715        ne_set_request_body_buffer(req, file_buffer, file_buffer_len); 
     716        ret = ne_request_dispatch(req); 
     717        ne_request_destroy(req); 
     718    } 
     719 
    730720    ne_session_destroy(sess); 
    731721 
     
    746736    if (close_request) { 
    747737        efree(close_request); 
    748     } 
    749     if (alloc_file) { 
    750         efree(file_buffer); 
    751738    } 
    752739    if (alloc_url) { 
  • trunk/php_mogilefs.h

    r209 r216  
    115115PHPAPI int mogilefs_sock_write(MogilefsSock *mogilefs_sock, char *cmd, int cmd_len, short free_cmd TSRMLS_DC); 
    116116PHPAPI char * mogilefs_sock_read(MogilefsSock *mogilefs_sock, int *buf_len TSRMLS_DC); 
    117 PHPAPI char * mogilefs_file_to_mem(char *filename, int *file_buffer_len TSRMLS_DC); 
    118117PHPAPI char * mogilefs_create_open(MogilefsSock *mogilefs_sock, const char * const key, const char * const class, int multi_dest TSRMLS_DC); 
    119118PHPAPI int mogilefs_create_close(MogilefsSock *mogilefs_sock, const char * const m_key, const char * const class, const char * const close_request TSRMLS_DC); 
Note: See TracChangeset for help on using the changeset viewer.