PHPで画像アップロード、リサイズ、形式変換(jpg->webp等)はclass.upload.phpが便利
2024/03/30
今まで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無しでも簡単に導入できるので今後使っていきたい。
ただ日本語版リファレンスが無いのが辛いところ。
関連記事
-
-
smart_resize_imageで縦横の比率関係なく、固定リサイズ
PHPで縦横どちらかが指定の長さを超えた場合、比率を保ったままリサイズで使ったs ...
-
-
CodeIgniter4でフォームからファイルをアップロードし保存する方法
CodeIgniter4.4.4でformから画像等のファイルをアップロードし、 ...
-
-
PHPでスマホ(iPhone / Android)に画像をダウンロードさせる方法とダウンロード後の保存場所について
PHPで作ったシステムにスマホ(iPhone / Android)でアクセスし何 ...
-
-
PHPでデータベースを取り扱いやすくなるORMライブラリ「idiorm」の利用方法
Codeigniterでデータベースを取り扱う際にクエリビルダクラスを用いて可読 ...
-
-
PHPで画像にモザイクをかけて保存
やりたかった事はPHPで ・モザイク処理 ・元の画像とは別にファイル名をつけて保 ...