Webシステムでファイルアップロードをする前に
ファイルの種類をチェックする処理を実装しようとしました。
備忘録として検証結果を投稿します。
※サーバ側の構築手順は省略しています
検証環境
- サーバ
- Rocky Linux 8
- Apache 2.4.37
- クライアント
- Windows 10
- Google Chrome
検証方法
- 検証用ソース(index.php)をサーバ側(/var/www/html/)に格納する
- PHPをインストールする
- クライアント側からhttp://[IPアドレス]/にアクセスする
- 検証したいファイルを選択し、「アップロード」ボタンをクリックする
- 画面に表示されるMIMEタイプを確認する
検証用ソース
index.php
<?php
// POSTされたファイルのチェック
if (isset($_POST["sample-file-upload"])) {
$uploadFile = $_FILES['sample-file']['tmp_name'];
$uploadFileFinfo = finfo_open(FILEINFO_MIME_TYPE);
$csvDataType = finfo_file($uploadFileFinfo, $uploadFile);
finfo_close($uploadFileFinfo);
echo "アップロードされたMIMEタイプは「";
echo "{$csvDataType}";
echo "」です";
}
?>
<!DOCTYPE html>
<html>
<head>
<title>MIMEタイプ確認用</title>
</head>
<body>
<form action="/" method="post" enctype="multipart/form-data">
アップロードするファイルを選択してください:
<input type="file" name="sample-file" id="sample-file">
<input type="submit" value="アップロード" name="sample-file-upload">
</form>
</body>
</html>
PHPバージョンの変更手順
(追加していない場合)EPELレポジトリとRemiレポジトリを追加
# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
PHPアンインストール
# dnf list installed | grep php
// パッケージは適宜変える
# dnf remove php php-mbstring php-mysqlnd
# dnf list installed | grep php
PHPインストール
# dnf module reset php
// ここでバージョンを指定
# dnf module enable php:remi-8.2
// パッケージは適宜変える
# dnf install php php-mbstring php-mysqlnd
# php -v
# dnf list installed | grep php
Apache再起動
# systemctl status httpd
# systemctl restart httpd
# systemctl status httpd
検証したファイルの種類
- csv
- zip
- jpg
- png
検証したPHPバージョン
- PHP 7.4(PHP 7.4.33)
- PHP 8.0(PHP 8.0.29)
- PHP 8.1(PHP 8.1.21)
- PHP 8.2(PHP 8.2.8)
検証結果(画面に表示されたMIMEタイプ)
- csv
- PHP 7.4:text/plain
- PHP 8.0:application/csv
- PHP 8.1:text/csv
- PHP 8.2:text/csv
- zip
- PHP 7.4:application/zip
- PHP 8.0:application/zip
- PHP 8.1:application/zip
- PHP 8.2:application/zip
- jpg
- PHP 7.4:image/jpeg
- PHP 8.0:image/jpeg
- PHP 8.1:image/jpeg
- PHP 8.2:image/jpeg
- png
- PHP 7.4:image/png
- PHP 8.0:image/png
- PHP 8.1:image/png
- PHP 8.2:image/png
まとめ
今回は自分が扱う予定のファイル4種類で検証しました。
PHPバージョンによってMIMEタイプが変わったのは、csvだけでした。
他にもMIMEタイプが変わるファイルを見つけたら、追記します。
最後までご覧いただきありがとうございました。