问题
你不能通过调整任何配置来解决这个问题,因为它是 hard limit set by PHP(32 位架构上的 PHP_INT_MAX 是 2G (2^(32-1)-1))
有希望
您可以手动修补,甚至更好地覆盖responsible nextcloud code:
手动打补丁(因为你没有使用作曲家,这可能是你想要做的)
// this one is pretty memory expensive, but works with resouce and string
// Test: 4GB file, 2GB chunks (at 32bits)
// 12GB memory usage! - hell no
public function file_put_contents($path, $data) {
$bytesWritten = 0;
foreach (explode(PHP_EOL, chunk_split($data, PHP_INT_MAX, PHP_EOL)) as $chunk) {
$bytesWritten += file_put_contents($this->getSourcePath($path), $chunk, FILE_APPEND|LOCK_EX);
}
return $bytesWritten;
}
或
// better use this, in case $data is a resource - I dont know, you have to test it!
// Test: 4GB file, 1MB chunks
// 2MB memory usage - much better :)
public function file_put_contents($path, $data) {
$bytesWritten = 0;
while ($chunk = fread($data, 2**20)) {
$bytesWritten += file_put_contents($this->getSourcePath($path), $chunk, FILE_APPEND|LOCK_EX);
}
return $bytesWritten;
}
如果你想覆盖(作曲家)
class PatchedLocal extends OC\Files\Storage\Local {
public function file_put_contents($path, $data) {
// same as above ...
}
}
以及here 强制自动加载器使用您的PatchedLocal 所需的一切。 - 如前所述,您希望为此使用 composers PSR-4 实现 - 通过 composer.json。