Webブラウザから画像などのファイルをアップロードできることは読者もご存知でしょう。ブログのように、
なお、
アップロードのためのフォーム
まず、
<form method="post" action="<?php echo $_SERVER[ 'PHP_SELF' ]; ?>"
enctype="multipart/form-data"><div>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
タイトル<input type="text" name="title" size="50"><br>
画像<input type="file" name="picture">
<input type="submit" value="登録">
</div></form>
![図1 リスト1の画面表示 図1 リスト1の画面表示](/assets/images/dev/serial/01/start-php/0012/thumb/TH400_01.jpg)
以下にそのポイントを示します。
- <form enctype="multipart/
form-data" method="..." action="..."> - <input type="hidden" name="MAX_FILE_SIZE"
value="アップロード可能な最大容量(バイト単位)"> - <input type="file" name="...">
1.と3.は、
その中で1.は、enctype="multipart/
を忘れずに記述しましょう。
2.はPHPプログラムによりデータを受信する場合に必要なもので、
サーバ側には記憶容量や通信時間などの制限がどうしても必要な場合が多いと思いますが、
そして3.は実際にアップロードされるデータやファイル名をPHPプログラムに送信するフィールドとなります。Webブラウザの画面上ではファイル名しか指定しませんが、
PHPプログラムでのデータ受信
前述のフォームを通じてWebブラウザからファイルがアップロードされると、
$_FILES['nameattr']['name'] | ファイル名 |
$_FILES['nameattr']['size'] | ファイル容量 |
$_FILES['nameattr']['tmp_ |
サーバ上の一時ファイル名 |
$_FILES['nameattr']['error'] | エラーコード |
そして、$_FILES['nameattr']['error']
で表されるによるエラーコードには、
なお、$_FILES['picture']['name'][ 0 ]
などとします。
画像1<input type="file" name="picture[]"><br>
画像2<input type="file" name="picture[]"><br>
画像3<input type="file" name="picture[]">
ファイルでの保存
アップロードによって受信したデータをファイルとして保存してみましょう。まずリスト3に、
// $file は データの一時ファイル名, $name は アップロードしたファイルの名称
$file = $_FILES[ 'picture' ][ 'tmp_name' ];
$name = $_FILES[ 'picture' ][ 'name' ];
// 正常にアップロードされていれば、imgディレクトリにデータを保存
if ( $_FILES[ 'picture' ][ 'error' ] == UPLOAD_ERR_OK &&
is_uploaded_file( $file ) )
move_uploaded_file( $file, 'img/' . $name );
アップロードが完了したら、
データの確認が済んだら、
データベースへの保存
アップロードにより受信したデータは、
リスト4では、
$title = $_POST[ 'title' ]; // 画像のタイトル
$type = $_FILES[ 'picture' ][ 'type' ]; // MIMEタイプ
$file = $_FILES[ 'picture' ][ 'tmp_name' ]; // 一時ファイル名
if ( $_FILES[ 'picture' ][ 'error' ] == UPLOAD_ERR_OK &&
is_uploaded_file( $file ) ) {
// データベース接続
$db = new PDO( 'pgsql:host=localhost port=5432 dbname=postgres', 'postgres', 'password' );
// トランザクション開始
$db->beginTransaction();
// SQL文実行準備
$stmt = $db->prepare( 'INSERT INTO picture( title, type, data ) VALUES ( :title, :type, lo_import( :file ) )' );
// SQL文実行
$stmt->execute( array( ':title' => $title, ':type' => $type, ':file' => $file ) );
// 実行完了(コミット)
$db->commit();
// データベース切断
unset( $db );
}
CREATE SEQUENCE picid;
CREATE TABLE picture (
id INTEGER PRIMARY KEY NOT NULL DEFAULT NEXTVAL( 'picid' ),
title VARCHAR(200) NOT NULL UNIQUE,
type VARCHAR(30) NOT NULL,
data oid NOT NULL
);
これまで基本的なPHPプログラミングのトピックをさまざま紹介してきたこの連載ですが、