【 PHP 】PHP8に入門してみた 186日目 PHPの基本 ( リクエスト情報 画像をアップロードしてみよう!)

PHP8技術者認定初級試験 が始まるようなので 試験に向けて (できるだけ)勉強しようと思います! 使用する書籍は独習PHP 第4版(山田 祥寛)|翔泳社の本 (shoeisha.co.jp) となります。

リクエスト情報

画像をアップロード $_FILES

$_FILESを使用するとアップロード機能も簡単に利用できます。

file1.php

<!DOCTYPE html>
<?php require_once './Encode.php'; ?>
<html>

<head>
    <meta charset="UTF-8" />
    <title>アップロード処理</title>
    <!-- Bootstrapを有効化 -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" />
</head>

<body>
    <form method="POST" action="file2.php" enctype="multipart/form-data">
        <label for="upfile">ファイルのパス: </label>
        <input type="hidden" name="max_file_size" value="1000000" />
        <input id="upfile" type="file" name="upfile" size="40" />
        <input type="submit" value="アップロード" />
    </form>
</body>

</html>

file2.php

<?php
// アップロード処理そのものの成否をチェック
if ($_FILES['upfile']['error'] !== UPLOAD_ERR_OK) {
    $msg = [
        UPLOAD_ERR_INI_SIZE => 'php.iniのupload_max_filesize制限を超えています。',
        UPLOAD_ERR_PARTIAL => 'HTMLのMAX_FILE_SIZE制限を超えています。',
        UPLOAD_ERR_NO_FILE => 'ファイルはアップロードされていません。',
        UPLOAD_ERR_NO_TMP_DIR => '一時保存フォルダーが存在しません',
        UPLOAD_ERR_CANT_WRITE => 'ディスクへの書き込みに失敗しました。',
        UPLOAD_ERR_EXTENSION => '拡張モジュールによってアップロードが中断されました。',
    ];
    $err_msg = $msg[$_FILE['upfile']['error']];
    //拡張子が許可されたものであるか判断
} elseif (!in_array(strtolower(pathinfo($_FILES['upfile']['name'])['extension']), ['gif', 'jpg', 'jpeg', 'png'])) {
    $err_msg = '画像以外のファイルはアップロードできません。';
    //ファイルの内容が画像であるかチェック
} elseif (!in_array(finfo_file(finfo_open(FILEINFO_MIME_TYPE), $_FILES['upfile']['tmp_name']), ['image/gif', 'image/jpg', 'image/jpeg', 'image/png'])) {
    $err_msg = 'ファイルの内容が画像ではありません。';
} else {
    $src = $_FILES['upfile']['tmp_name'];
    $dest = $_FILES['upfile']['name'];
    if (!move_uploaded_file($src, 'doc/' . $dest)) {
        $err_msg = 'アップロード処理に失敗しました。';
    }
}

// エラー発生時はエラーメッセージを表示
if (isset($erro_msg)) {
    die('<div stype="color:Red;">' . $error_msg . '</div>');
}

// 処理成功時はフォームにリダイレクト
header('Location: http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/file1.php');

 

 

メモ

・・・簡単でしょうか😑

PHPPHP

Posted by raika@blog