HTTP POSTでファイルをアップロードして保存する|PHP

HTTP POSTでアップロードしたファイルをPHPで受信・保存する方法です。

アップロード処理で使用するPHP関数

is_uploaded_file()

アップロードされたファイルかどうかを調べます。アップロードされたファイルはテンポラリとして保存されます。なので、$_FILES['imagefile']['tmp_name']のようにtmp_nameを指定します。

move_uploaded_file()

アップロードされたファイルを新しい位置に移動します。

サンプル

本サンプルはアップロードされた画像ファイルをサーバーに保存し、そのパスをデータベースに保存します。

post-form.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>POSTサンプル</title>
<style type="text/css">
.form_label {
    display: inline-block;
    width: 100px;
}
</style>
</head>
<body>
<?PHP
    $checkkey_value = 'E195335D5206A8CC06312DC2717CB514';
?>
<form action="post-form.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="checkkey" value="<?php echo $checkkey_value ?>">
    <span class="form_label">ID</span><input type="text" name="id" value=""><br>
    <span class="form_label">名前</span><input type="text" name="name" value=""><br>
    <span class="form_label">画像</span><input type="file" name="imagefile"><br>
    <input type="submit" value="送信">
</form>
</body>
</html>
<?PHP
    if ( isset( $_POST ) && isset( $_POST['checkkey'] ) && $_POST['checkkey'] == $checkkey_value ) {
        $id = 0;
        if ( isset( $_POST['id'] ) ) {
            $id = $_POST['id'];
        }

        $check_uploadfile = isset( $_FILES ) && isset( $_FILES['imagefile'] ) && is_uploaded_file( $_FILES['imagefile']['tmp_name'] );

        if ( $id == 0 || !$check_uploadfile ) {
            exit( 'parameter error.' );
        }

        $name = 0;
        if ( isset( $_POST['name'] ) ) {
            $name = $_POST['name'];
        }

        // 画像アップロード (テンポラリから実際のディレクトリに移動)
        $file_name = basename( $_FILES['imagefile']['name'] );
        $dest_path = 'uploadimg' . DIRECTORY_SEPARATOR . $file_name;
        if ( !move_uploaded_file( $_FILES['imagefile']['tmp_name'], $dest_path ) ) {
            exit( 'File upload failed.' );
        }

        // DB接続
        $mysqli = new mysqli( 'localhost', 'username', 'password', 'dbname' );

        if ( $mysqli->connect_errno ) {
            exit( 'Database open error.' );
        }
        $mysqli->set_charset( 'utf-8' );

        $query = "INSERT INTO sample_table (id, name, image_file)
            VALUES ( '$id', '$name', '$file_name')";
        $res = $mysqli->query( $query );
        var_dump( $res );

        $mysqli->close();
    }
ブラウザで表示されるフォーム
post-form
$checkkey_valueは正しいフォームから送られた要求かどうかを判定するための値です。
このエントリーをはてなブックマークに追加
にほんブログ村 IT技術ブログへ

コメント

メールアドレスが公開されることはありません。 が付いている欄は必須項目です