■フォームを使ったファイルのアップロード方法
フォームからのテキストデータはスーパーグローバル変数の
$_POSTまたは $_GETで取得する事ができましたが、ファイルはこれでは扱えません。
ファイルを受け取るには
$_FILES 変数を利用します。$_POSTと同じように$_FILESもスーパーグローバル変数(PHPプログラムの何処からでもアクセス可能)です。$_FILESは多次元配列になっており、様々な値を得ることができます。
neme = フォームのファイル選択フィールドのnameプロパティ
・$_FILES[neme]['name'] =送信したクライアントマシン上のファイル名
・$_FILES[neme]['size'] =送信したファイルのバイト単位のサイズ
・$_FILES[neme]['type']=ファイルMIME型。
・$_FILES[neme]['tmp_name']=アップロードされたファイルがサーバー上で一時保存されているテンポラ
リファイルの名前
・$_FILES[neme]['error']=PHP4.2.0で追加されたエラーコード。
UPLOAD_ERR_OK
値:
0; エラーはなく、ファイルアップロードは成功しています。
UPLOAD_ERR_INI_SIZE
値:
1; アップロードされたファイルは、php.ini
の upload_max_filesize
ディレクティブの値を超えています。
UPLOAD_ERR_FORM_SIZE
値:
2; アップロードされたファイルは、HTMLフォームで指定された
MAX_FILE_SIZE
を超えています。
UPLOAD_ERR_PARTIAL
値:
3; アップロードされたファイルは一部のみしかアップロードされていません。
UPLOAD_ERR_NO_FILE
値:
4; ファイルはアップロードされませんでした。
UPLOAD_ERR_NO_TMP_DIR
値:
6; テンポラリフォルダがありません。PHP
4.3.10 と PHP
5.0.3 で導入されました。
注意:
これらはPHP 4.3.0でPHP定数となりました。
下のsample
upload.php
では、ファイルをアップロードした場合に得られる情報を表示します。
ファイルアップロードという性質上、サンプルはご自分のサーバでお試しください。
サンプル
upload.php
(lzh圧縮)
upload.php
ソース
<!DOCTYPE
HTML PUBLIC "-//W3C//DTD
HTML 4.01
Transitional//EN">
<
html><head><meta
http-equiv="Content-Type" content="text/html;
charset=Shift_JIS">
<
title>sample:アップロードテスト</title></head>
sample:アップロードテスト
<
p>
<?PHP
if
($_FILES['file1']){
if
(!$_FILES['file1']['error']){
/* 一時保存ディレクトリから任意の場所にファイルを移動する場合は、
$uploaddir にディレクトリのパスを入れ、下の2行のコメント記号を外してください。
※アップロード先のディレクトリのパーミッション設定を適切に(777等)にすることを忘れないように。
*/
//$uploaddir='ここに保存先のディレクトリパス';
//if
(move_uploaded_file($_FILES['file1']['tmp_name'],
$uploaddir.$_FILES['file1']['name'])){$result='アップロード完了';}else{$result='アップロード失敗';}
$name=$_FILES['file1']['name'];
$size=$_FILES['file1']['size'];
$type=$_FILES['file1']['type'];
$tmpname=$_FILES['file1']['tmp_name'];
$error=$_FILES['file1']['error'];
if (!$result){$result='一時保存ディレクトリにアップロードされました。';}
print <<<EOM
------------------------送信内容-----------------------------------<P>
name=$name <P>
size=$size
バイト<P>
type=
$type <P>
tmp_name=
$tmpname <P>
error=$error <P>
$result<P>
-------------------------------------------------------------------
EOM;
}else{print
'ファイルアップロード時にエラーが発生しました。<P>';}
}
?>
<form
action="sample402.php" method="POST" enctype="multipart/form-data" name="form1">
<
table
width="300" border="0" cellpadding="4" cellspacing="0" bgcolor="#CCCCFF">
<
tr><td>
<
input
type="file" name="file1">
<
br>
<
br><input
type="submit" name="Submit" value="送信">
<
/td>
<
/tr></table></form>
<
/body></html>
|
※ごちゃごちゃ長いように見えますが、HTML部分と完了表示を除くと残りはわずかです。
■ファイル送信フォーム作成の注意
ファイル送信のために使用するフォームは
enctype="multipart/form-data" の属性を与えてやらなければなりません。無い場合はファイルアップロードは動作しませんのでお気をつけ下さい。
■アップロードしたファイルのパーミッションを確認
アップロードを完了し、任意のディレクトリに保存できたファイルのパーミッションを確認しておきましょう。
PHPからの操作できるが、ブラウザからの閲覧はできないとなっては、元も子もないですので。
※使用に関して発生した問題の責任は、一切負いませんのでご了承ください。
バグや不具合等に関しては、ご報告頂ければ善処します。
|