Php 使用flysystem将文件写入zip时内存不足
我正在编写一个工具,将用户上传的图像收集到zip存档中。为此,我从Flysystem中找到了ZipArchiveAdapter,它似乎做得很好 当zip存档中的文件数量达到数千个时,我遇到了内存限制的问题 当用户的图像数量开始超过1000时,通常会由于可用内存耗尽而失败。为了让它能够处理大多数图像少于1000张的用户,我将内存限制提高到4GB,但将其提高到4GB以上并不是一个真正的选择 此时的简化代码:Php 使用flysystem将文件写入zip时内存不足,php,ziparchive,flysystem,Php,Ziparchive,Flysystem,我正在编写一个工具,将用户上传的图像收集到zip存档中。为此,我从Flysystem中找到了ZipArchiveAdapter,它似乎做得很好 当zip存档中的文件数量达到数千个时,我遇到了内存限制的问题 当用户的图像数量开始超过1000时,通常会由于可用内存耗尽而失败。为了让它能够处理大多数图像少于1000张的用户,我将内存限制提高到4GB,但将其提高到4GB以上并不是一个真正的选择 此时的简化代码: <?php use League\Flysystem\Filesystem; use
<?php
use League\Flysystem\Filesystem;
use League\Flysystem\ZipArchive\ZipArchiveAdapter;
use League\Flysystem\Memory\MemoryAdapter;
class User {
// ... Other user code
public function createZipFile()
{
$tmpFile = tempnam('/tmp', "zippedimages_");
$download = new FileSystem(new ZipArchiveAdapter($tmpFile));
if ($this->getImageCount()) {
foreach ($this->getImages() as $image) {
$path_in_zip = "My Images/{$image->category->title}/{$image->id}_{$image->image->filename}";
$download->write($path_in_zip, $image->image->getData());
}
}
$download->getAdapter()->getArchive()->close();
return $tmpFile;
// Upload zip to s3-storage
}
}
如果它使用基本ZipArchive(内置PHP类),那么您可以使用它来提取文件,这可能有助于解压。我遇到问题的是打包zip文件的过程。解包在这里不是问题,因为这是用户将要做的事情。还是我误解了你的意思?就编写zips而言,我使用的都是内置的PHP类,但我不知道如何在“引擎罩”下工作。这意味着它的性能可能比您使用的这个适配器要好,也可能比不上它的包装器。但是你从来没有说过你使用的是什么框架。所以你说你在使用MemoryAdapter时遇到了内存问题。。。多么奇怪。MemoryAdapter实际上不是我在代码中使用的东西。这不是任何特定的框架,我只是使用我需要的。