上传文件时PHP DomDocument内存错误

时间:2018-02-07 19:12:02

标签: php laravel

在我的Laravel应用程序中,我有一个textarea,它有一个文本编辑器,允许人们上传图像。我需要从文本中获取这些图像并将它们保存到服务器中。

以下代码适用于小图片,但现在我尝试的图片只有400k,并且会导致内存错误。

我尝试使用许多不同文章和帖子中的许多不同方法来抑制错误,但无济于事。关于如何让它停止抛出错误的任何建议?

// $body contains the contents of the POSTed textarea, 
// which includes HTML and images

public function storeImages($body, $article)
{
    $dom = new \DomDocument();
    $dom->loadHtml($body, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $images = $dom->getElementsByTagName('img');

    foreach($images as $img)
    {
        $src = $img->getAttribute('src');

        // if the img source is 'data-url'
        if(preg_match('/data:image/', $src))
        {
            preg_match('/data:image\/(?<mime>.*?)\;/', $src, $groups);
            $mimetype = $groups['mime'];
            $filename = uniqid().'.'.$mimetype;
            $filepath = '/media/'.$article->id.'/'.$filename;
            $image = Image::make($src)
                ->encode($mimetype, 100)
                ->resize(1024, null, function ($constraint) {
                    $constraint->aspectRatio();
                })
                ->save(config('filesystems.disks.media.root').'/'.$article->id.'/'.$filename);
            $img->removeAttribute('src');
            $img->removeAttribute('style');
            $img->removeAttribute('data-filename');
            $img->setAttribute('src', $filepath);
            $img->setAttribute('class', 'img-responsive');
            $img->setAttribute('alt', '');
        }
    }

    return $dom->saveHTML();
}

0 个答案:

没有答案