aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorplegall <plg@piwigo.org>2009-04-14 22:49:04 +0000
committerplegall <plg@piwigo.org>2009-04-14 22:49:04 +0000
commit52db0a523cde763bfd0a11c1e01c639e96c04390 (patch)
tree1ec752035157c4b8a686ee6d6d3d9b37bd8cd58a
parenta3445bb236aa7b5db200db003760254452d6150e (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.php27
-rw-r--r--tools/piwigo_remote.pl4
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},