LoginSignup
4
1

CSVファイルのMIMEタイプはPHPバージョンで変わるようだ

Posted at

Webシステムでファイルアップロードをする前に
ファイルの種類をチェックする処理を実装しようとしました。

備忘録として検証結果を投稿します。
 ※サーバ側の構築手順は省略しています

検証環境

  • サーバ
    • Rocky Linux 8
    • Apache 2.4.37
  • クライアント
    • Windows 10
    • Google Chrome

検証方法

  • 検証用ソース(index.php)をサーバ側(/var/www/html/)に格納する
  • PHPをインストールする
  • クライアント側からhttp://[IPアドレス]/にアクセスする
  • 検証したいファイルを選択し、「アップロード」ボタンをクリックする
  • 画面に表示されるMIMEタイプを確認する

画面.png

検証用ソース

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タイプが変わるファイルを見つけたら、追記します。

最後までご覧いただきありがとうございました。

4
1
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
4
1