Skip to content

Commit

Permalink
merge r3239 from branch 2.0 to trunk
Browse files Browse the repository at this point in the history
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/trunk@3240 68402e56-0260-453c-a942-63ccdbb3a9ee
  • Loading branch information
plegall committed Apr 14, 2009
1 parent 77721e0 commit 3c27690
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 11 deletions.
27 changes: 18 additions & 9 deletions include/ws_functions.inc.php
Expand Up @@ -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) {
Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions tools/piwigo_remote.pl
Expand Up @@ -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});

Expand All @@ -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},
Expand Down

0 comments on commit 3c27690

Please sign in to comment.