今まで自分メモばかりだったが、過去の自分のような初心者に役に立つことを願って、主に自分メモ的な投稿を初めてみる。
PHPでCodeIgniterの簡易DB編集ライブラリ的な存在である「GroceryCrud」。
ちょっと古くてマイナーで今更感があるが、コスパが良いので省エネ的に管理画面を作るのに活用している。
そのGroceryCRUDで画像をアップロードするset_field_upload関数があるが、
アップロードしてもある拡張子やサイズが上手くアップできず、画面上にも何もエラーが出ない。
set_field_upload関数
https://www.grocerycrud.com/documentation/options_functions/set_field_upload
$crud = $this->generate_crud('blog_posts'); $crud->set_field_upload('file1','assets/uploads','pdf|doc|docx|xls|xlsx|ppt|pptx|zip'); $crud->display_as('file1', '資料1');
設定箇所が複数あるので、ログとソースをackして回る。
許可する拡張子とアップロード許可サイズの制限緩和
jquery.fileupload.config.js をみると、
許可する拡張子は config/grocery_crud.php から取得しているらしい。
$config['grocery_crud_file_upload_allow_file_types'] = 'gif|jpeg|jpg|png|tiff|doc|docx|txt|odt|xls|xlsx|pdf|ppt|pptx|pps|ppsx|mp3|m4a|ogg|wav|mp4|m4v|mov|wmv|flv|avi|mpg|ogv|3gp|3g2'; $config['grocery_crud_file_upload_max_file_size'] = '100MB';
上記設定変更して進んだが、まだエラーが出る。
アップロード許可サイズが20MBまでというエラー内容。
$config['grocery_crud_file_upload_max_file_size']以外にも設定箇所があるらしい。
php.ini 設定変更
そして、apacheのssl_error_logをtailすると、下記エラー内容。
[Wed Nov 13 12:48:36.362492 2019] [:error] [pid 30622] [client xx.xx.xx.xx:xxxxx] PHP Warning: POST Content-Length of 26961156 bytes exceeds the limit of 8388608 bytes in Unknown on line 0, referer: https://example.com/admin/blog/post/edit/102
それで下記の記事を見て、/etc/php.iniのpost_max_sizeを編集した。
https://qiita.com/N_baconham/items/5d79d0e64e5d3939b075
upload_max_filesize=100M post_max_size=100M memory_limit=100M
変更してapache再起動。
apachectl restart
そして、再び100MB近い91MBのpdfファイルを、、
set_field_uploadでアップロードできた!解決
追記:
動作画面のイメージも、下記のページから引用しておくので、管理画面をスクラッチで書いている過去の私のようなあなたは、ぜひ導入してみて。
https://www.grocerycrud.com/examples/set_upload_field_example/
もっといいライブラリとかオススメ情報も待ってます。