お客さん:CKFinderでちょっと大きめのファイルもアップロードできるようにしたい!!
僕:よっしゃconfig変えるだけでいけるな。余裕や!!
一時間後...
僕:あれconfig変えたのにアップロードできない。。オワタ。。
ということが発生したので忘れないようにメモメモ。実は単純な話でした。
まずDocumentを確認
https://ckeditor.com/docs/ckfinder/ckfinder3-php/configuration.html
どうやらfileSizeに20Mとか2Gとか設定すればいいみたいだ(ここまでは余裕モードでした)
アップロードできない。なんか設定効いてないっぽい。。
色々設定を変えてみてもある一定までは効くけど、それ以上はアップロードできない状態になってました(ここら辺から暗雲が立ち込める)
しょうがないのでCKFinderのソースを確認してみることに。
ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Init.php
$resourceTypeObject = array(
'name' => $resourceTypeName,
'allowedExtensions' => implode(",", $resourceType->getAllowedExtensions()),
'deniedExtensions' => implode(",", $resourceType->getDeniedExtensions()),
'hash' => $resourceType->getHash(),
'acl' => $aclMask,
'maxSize' => $resourceType->getMaxSize() ? min($resourceType->getMaxSize(), $phpMaxSize) : $phpMaxSize
)
ソースを追っていてふと気づく。$resourceType->getMaxSize()
と$phpMaxSize
の最小値を設定してる?
ckfinder/core/connector/php/vendor/cksource/ckfinder/src/CKSource/CKFinder/Command/Init.php
$phpMaxSize = 0;
$maxUpload = Utils::returnBytes(ini_get('upload_max_filesize'));
if ($maxUpload) {
$phpMaxSize = $maxUpload;
}
$maxPost = Utils::returnBytes(ini_get('post_max_size'));
if ($maxPost) {
$phpMaxSize = $phpMaxSize ? min($phpMaxSize, $maxPost) : $maxPost;
}
//ini_get('memory_limit') only works if compiled with "--enable-memory-limit"
$memoryLimit = Utils::returnBytes(@ini_get('memory_limit'));
if ($memoryLimit && $memoryLimit != -1) {
$phpMaxSize = $phpMaxSize ? min($phpMaxSize, $memoryLimit) : $memoryLimit;
}
さらに追っていくと。
あ、やはりupload_max_filesize
とかpost_max_size
を超えないようにしている!!
まあ冷静に考えてみればそりゃそうですよね。。
解決
ということでCKFinderのconfigの設定と合わせて、phpのupload_max_filesize
も合わせて許容値までに上限をあげて解決しました。