Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用flysystem将文件写入zip时内存不足_Php_Ziparchive_Flysystem - Fatal编程技术网

Php 使用flysystem将文件写入zip时内存不足

Php 使用flysystem将文件写入zip时内存不足,php,ziparchive,flysystem,Php,Ziparchive,Flysystem,我正在编写一个工具,将用户上传的图像收集到zip存档中。为此,我从Flysystem中找到了ZipArchiveAdapter,它似乎做得很好 当zip存档中的文件数量达到数千个时,我遇到了内存限制的问题 当用户的图像数量开始超过1000时,通常会由于可用内存耗尽而失败。为了让它能够处理大多数图像少于1000张的用户,我将内存限制提高到4GB,但将其提高到4GB以上并不是一个真正的选择 此时的简化代码: <?php use League\Flysystem\Filesystem; use

我正在编写一个工具,将用户上传的图像收集到zip存档中。为此,我从Flysystem中找到了ZipArchiveAdapter,它似乎做得很好

当zip存档中的文件数量达到数千个时,我遇到了内存限制的问题

当用户的图像数量开始超过1000时,通常会由于可用内存耗尽而失败。为了让它能够处理大多数图像少于1000张的用户,我将内存限制提高到4GB,但将其提高到4GB以上并不是一个真正的选择

此时的简化代码:

<?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实际上不是我在代码中使用的东西。这不是任何特定的框架,我只是使用我需要的。