Fix PHP memory leak in file_get_contents()

* ref https://bugs.php.net/bug.php?id=61961
* ref https://github.com/owncloud/core/issues/20261#issuecomment-180000256
* code is based on the proposal of @chriseqipe
* fixes #20261
This commit is contained in:
Morris Jobke 2016-03-16 13:49:07 +01:00
parent 277c9f4a03
commit 7fdac35654
2 changed files with 9 additions and 2 deletions

View File

@ -90,7 +90,7 @@ class OC_FileChunking {
* Assembles the chunks into the file specified by the path.
* Chunks are deleted afterwards.
*
* @param string $f target path
* @param resource $f target path
*
* @return integer assembled file size
*
@ -106,6 +106,8 @@ class OC_FileChunking {
// remove after reading to directly save space
$cache->remove($prefix.$i);
$count += fwrite($f, $chunk);
// let php release the memory to work around memory exhausted error with php 5.6
$chunk = null;
}
return $count;

View File

@ -176,7 +176,12 @@ class Local extends \OC\Files\Storage\Common {
}
public function file_get_contents($path) {
return file_get_contents($this->getSourcePath($path));
// file_get_contents() has a memory leak: https://bugs.php.net/bug.php?id=61961
$filename = $this->getSourcePath($path);
$handle = fopen($filename,'rb');
$content = fread($handle, filesize($filename));
fclose($handle);
return $content;
}
public function file_put_contents($path, $data) {