LoginSignup
3
3

More than 5 years have passed since last update.

PHP/Laravelで画像がアップロードできない不具合

Posted at

PHP/Laravelで画像がアップロードできない不具合の対処について以下に示す。

TL;DR

php.iniのupload_max_filesizeの上限サイズを変更する。

実装環境

  • PHP 7.2.6
  • Laravel 5.5.40
  • CentOS 7

動作環境

  • iPhone8
  • iOS11.4

発生した問題

以下のような実装で画像ファイルのアップロードを行う際に画像ファイルがアップロードできない不具合が発生していた。

<form role="form" method="POST" action="{{ url('/image_converter') }}">
    <input type="file" accept="image/*" name="image">
    <input type="submit" value="送信する">
</form>
<?php

public function imageConverter($request) 
{
    $request = request->all();
    if (!empty($request['image']) {
        $imagick = new \Imagick();
        $imagick->readImage(realpath($request['image']));
        $imagick->autoOrient();
        $imagick->setImageFormat('jpg');
        $path = publicpath('/images/test.jpg');
        $imagick->writeImage($path);
    }
}

実行結果

以下のようなエラーが発生した

"message": "The path is a directory: /app/public",
"exception": "ImagickException",

更にアップロードされた画像ファイルの情報を確認すると、以下のような情報が確認できた

originalName: image.jpg
mimeType: application/octet-stream
size: 0
error 1
path: ""
basename: ""
pathname: ""
exception: ""
realpath: "/app/public"

原因

  • php.iniのupload_max_filesizeが2Mになっていた(デフォルト設定)

    PC環境だと画像のサイズが2Mを超えないため、あまり関係はないが、スマホ(iPhone)だと撮った写真のサイズが2M以上超えることが多々あるため、デフォルトの設定では上記の情報のようにファイルがapplication/octet-streamになってしまう。

解決方法

php.iniのファイルのupload_max_filesizeを変更する

php.ini
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
; ここのfilesizeを2M以上に変更する
upload_max_filesize = 2M

php.iniを変更したため、以下のコマンドを実行する

apacheの再起動

$ service httpd restart

php-fpmの再起動

$ service php-fpm restart
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3