Vom: 13.07.2018

Massenweise Erzeugung Assets: stream benutzen

Ein gängiger Weg den wir oft sehen um in Pimcore Assets anzulegen sieht folgendermaßen aus:

<?php
$data = str_get_contents("/blah/fasel/file.png");
$asset = new Asset\Image();
$asset->setParentId($parent_id);
$asset->setUserOwner(1);
$asset->setUserModification(1);
$asset->setFilename($asset_name);
$asset->setData($data);
$asset->save();

Dieser Weg funktioniert, wird aber bei sehr großen Dateien schnell unhandlich, langsam und hat das Potential, das Speicherlimit zu überschreiten.

Besser ist es hier, Streams zu benutzen:

<?php
$stream = fopen($filename, "r+");
$asset = new Asset\Image();
$asset->setStream($stream);
$asset->setParentId($parent_id);
$asset->setUserOwner(1);
$asset->setUserModification(1);
$asset->setFilename($asset_name);
$asset->save();

Auf diese Weise kümmert sich PHP um die häppchenweise Verarbeitung, was schneller abläuft und mit den gängigen Limits funktioniert.