勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPで画像アップロード、リサイズ、形式変換(jpg->webp等)はclass.upload.phpが便利

   2024/03/30  PHP

今までPHPで画像関連の処理を行う場合、リサイズの時のみsmart_resize_imageを使うことがあったものの、その他処理はバニラPHPで対応していた。もう少し楽できないか調べてみたところclass.upload.phpというライブラリが良いらしい。以下に実装方法をメモ。

 

class.upload.php

公式サイト

https://www.verot.net/php_class_upload.htm

GitHub

https://github.com/verot/class.upload.php

ドキュメント

https://github.com/verot/class.upload.php/blob/master/README.md

 

インストール方法

composerを使う場合

composer require verot/class.upload.php

自サーバにアップロードする場合

公式サイトのclass.upload.phpページよりファイルをダウンロードし、適当なディレクトリにアップロードする。

今回はこちらの方法を取った。

 

ソースコード

フォーム側(index.php)

<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form action="upload.php" method="post" enctype="multipart/form-data">
            <input type="file" name="file">
            <input type="submit" name="submit" value="送信">
        </form>
    </body>
</html>

アップロード側(upload.php)

<?php
require_once 'class.upload.php';

$file = $_FILES['file'];
$lang = 'ja_JP';

$handle = new \Verot\Upload\Upload($file, $lang);

if( $handle->uploaded ){

    //ファイル名の変更
    $handle->file_new_name_body = date('YmdHis');

    //同一ファイル名の場合は上書き
    $handle->file_overwrite = true;

    //アスペクト比はそのままで横幅を300pxにリサイズ
    $handle->image_resize = true;
    $handle->image_x = 300;
    $handle->image_ratio = true;

    $handle->image_convert = 'webp';

    //アップロードするディレクトリ指定
    $handle->process('./file/');
    if( $handle->processed ){
        //成功処理
        echo 'success';

    }else{
        //エラー処理
        echo $handle->error;
    }

}else{
    //エラー処理
    echo $handle->error;
}

ファイルの拡張子をチェックしたい場合

以下で拡張子を取得できるので適当にif文とかでチェックすること。

$handle->image_src_type

Destination directory can't be made writeable. Can't carry on a process.エラーが出る場合

ファイルアップロード用ディレクトリのパーミッションを777もしくは775あたりに変更すること。

 

所感

簡潔に書ける上にcomposer無しでも簡単に導入できるので今後使っていきたい。

ただ日本語版リファレンスが無いのが辛いところ。

 - PHP

  関連記事

PHPのHTTPクライアント用ライブラリ「Guzzle」の利用方法

以前に「Requests for PHP」を試したが、似たようなライブラリで「G ...

PHPで画像にモザイクをかけて保存

やりたかった事はPHPで ・モザイク処理 ・元の画像とは別にファイル名をつけて保 ...

PHPにて「ImageHash」ライブラリを使用し画像の類似度を算出する方法

以前にPHPの「image-comparator」ライブラリで画像の類似度を算出 ...

Composer無し&ファイル1枚でPHPのエラーメッセージ画面をリッチにするライブラリ「PHP Error」の利用方法

先日PHPのエラーメッセージを見やすくするwhoopsの利用方法をメモしたが導入 ...

PHPでデータベースを取り扱いやすくなるORMライブラリ「idiorm」の利用方法

Codeigniterでデータベースを取り扱う際にクエリビルダクラスを用いて可読 ...