diff options
author | plegall <plg@piwigo.org> | 2009-04-14 22:49:04 +0000 |
---|---|---|
committer | plegall <plg@piwigo.org> | 2009-04-14 22:49:04 +0000 |
commit | 52db0a523cde763bfd0a11c1e01c639e96c04390 (patch) | |
tree | 1ec752035157c4b8a686ee6d6d3d9b37bd8cd58a | |
parent | a3445bb236aa7b5db200db003760254452d6150e (diff) |
bug 949 fixed: to avoid memory limit on server side, base64 encode chunks one
by one on client side and base64 decode chunks one by one on server side.
git-svn-id: http://piwigo.org/svn/branches/2.0@3239 68402e56-0260-453c-a942-63ccdbb3a9ee
-rw-r--r-- | include/ws_functions.inc.php | 27 | ||||
-rw-r--r-- | tools/piwigo_remote.pl | 4 |
2 files changed, 20 insertions, 11 deletions
diff --git a/include/ws_functions.inc.php b/include/ws_functions.inc.php index 7c1d52580..422cfd176 100644 --- a/include/ws_functions.inc.php +++ b/include/ws_functions.inc.php @@ -923,9 +923,11 @@ function ws_images_add_chunk($params, &$service) $params['position'] ); + ws_logfile('[ws_images_add_chunk] data length : '.strlen($params['data'])); + $bytes_written = file_put_contents( $upload_dir.'/'.$filename, - $params['data'] + base64_decode($params['data']) ); if (false === $bytes_written) { @@ -958,17 +960,24 @@ function merge_chunks($output_filepath, $original_sum, $type) } sort($chunks); + + ws_logfile('[merge_chunks] memory_get_usage before loading chunks: '.memory_get_usage()); - $string = null; - foreach ($chunks as $chunk) { - $string.= file_get_contents($chunk); - unlink($chunk); - } - if (!file_put_contents($output_filepath, base64_decode($string))) + foreach ($chunks as $chunk) { - return new PwgError(500, 'error while merging chunks for '.$output_filepath); + $string = file_get_contents($chunk); + + ws_logfile('[merge_chunks] memory_get_usage on chunk '.++$i.': '.memory_get_usage()); + + if (!file_put_contents($output_filepath, $string, FILE_APPEND)) + { + return new PwgError(500, 'error while writting chunks for '.$output_filepath); + } + + unlink($chunk); } - + + ws_logfile('[merge_chunks] memory_get_usage after loading chunks: '.memory_get_usage()); } function ws_images_add($params, &$service) diff --git a/tools/piwigo_remote.pl b/tools/piwigo_remote.pl index 91142f25a..32ecbf030 100644 --- a/tools/piwigo_remote.pl +++ b/tools/piwigo_remote.pl @@ -255,7 +255,7 @@ sub pwg_ws_get_query { sub send_chunks { my %params = @_; - my $content = encode_base64(read_file($params{filepath})); + my $content = read_file($params{filepath}); my $content_length = length($content); my $nb_chunks = ceil($content_length / $conf{chunk_size}); @@ -273,7 +273,7 @@ sub send_chunks { $conf{base_url}.'/ws.php?format=json', { method => 'pwg.images.addChunk', - data => $chunk, + data => encode_base64($chunk), original_sum => $params{original_sum}, position => $chunk_id, type => $params{type}, |