Vom: 08.09.2013

Pimcore: upload_max_filesize richtig setzen

In PHP ist die Größer der Dateien, die man als User hochladen, begrenzt, und das per default oft sehr gering. Dieser Wert wird mit der Variable max_upload_size in der php.ini gesetzt. Will man es dem User also ermöglichen, große Dateien hochzuladen, muss man den Wert dieser Variable erhöhen. Schnell stellt man aber fest, daß der Upload-Dialog für Assets sich nicht geändert hat. Woran liegt das, und wie kann man darauf reagieren?

Wie macht das Pimcore?

Eine Durchsicht der config-Dateien und Systemeigenschaften-Seiten zeigt keine Möglichkeit, die Dateigröße zu konfigurieren. Die maximale Größe muss also ander zustande kommen. Wir haben also mal vom Upload-Dialog aus mit Debuggen begonnen. Die angezeigte Größe wird über eine Variable gesetzt, die wiederum im Controller gesetzt wird. Hierfür konnten wir den Indexcontroller indentifizieren: pimcore/modules/admin/controllers/IndexController:81
// upload limit
$max_upload = filesize2bytes(ini_get("upload_max_filesize") . "B");
$max_post = filesize2bytes(ini_get("post_max_size") . "B");
$memory_limit = filesize2bytes(ini_get("memory_limit") . "B");
$upload_mb = min($max_upload, $max_post, $memory_limit);
        
$this->view->upload_max_filesize = $upload_mb;
Und hier sieht man, dass Pimcore ein Feature hat, dass der Upload so begrenzt wird dass er garantiert klappt. Denn der Erfolg des Uploads hängt noch von anderen Faktoren ab wie die maximale Größe eines POST-Requests oder gar die maximale Speichergröße, die PHP beanspruchen darf. Der Upload wird also auf das Maximum der drei Variablen upload_max_filesize, post_max_size und memory_limit gesetzt.

So erhöht man den Wert

Um größere Uploads zu ermöglichen, müssen also diese drei Werte angehoben werden. Wir machen dies in der mit pimcore ohnehin schon vorhandenen Datei .htacces. Um das Maß auf 256MB zu setzen, ist also beispielsweise folgendes notwendig.
 
php_value max_upload_size 256M
php_value post_max_size 256M
php_value memory_limit 256M