PHPが動作しているサーバにファイルをアップロードする仕組みです。この単元では、指定したフォルダに同時に複数ファイルをアップロードします。
機能概要
準備
同一フォルダ内に「uploads」フォルダを作成すること。
フォルダ権限(パーミッション)を下記の図の通り、変更します。「8進数」が「0777」となります。
プログラミングコード
「upload_v2.php」ファイルアップロードページファイル
- 2行目:「POST」で送信された場合に処理を行います。
- 5~19行目:「ファイル数」の数だけ繰り返し処理を行います。
- 7行目:もし「送信エラー」の場合は、次の繰り返し処理にうつる。
- 10行目:保存先のパスを変数「$save」に代入します。
- 13行目:指定したパスにファイルを保存します。ここで最後の[$key]が繰り返し処理のキーになります。
- 30行目:「formタグ」のプロパティとして「enctype=”multipart/form-data”」を必ず指定すること。
- 31行目:「inputタグ」のタイプを「file」に指定します。ここがポイントで『up_file[]』と『multiple』に変更/追加します。
- 35行目:アップロードしたファイルを表示します。
<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
//ファイルの繰り返し処理
foreach($_FILES['up_file']['error'] as $key => $error){
if($error) continue; //送信エラーの場合はブロック
//ファイル名を使用して保存先ディレクトリを指定 basename()でディレクトリトラバーサル攻撃を防ぐ
$save = 'uploads/'.basename($_FILES['up_file']['name'][$key]);
//move_uploaded_fileで、一時ファイルを保存先ディレクトリに移動させる
if(move_uploaded_file($_FILES['up_file']['tmp_name'][$key], $save)){
echo $_FILES['up_file']['name'][$key].'のアップロード成功!<br>';
$dispFilePath .= "<img src='uploads/".basename($_FILES['up_file']['name'][$key])."' width='200px' />";
}else{
echo 'アップロード失敗!';
}
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>sample</title>
</head>
<body>
<form action="upload_v2.php" method="POST" enctype="multipart/form-data">
<input type="file" name="up_file[]" multiple><input type="submit" name="btn_send" value="送信">
<div id="disp_image">
<?php
if(isset($dispFilePath)){
echo $dispFilePath;
}
?>
</div>
</form>
</body>
</html>
演習問題
- 上記のコードを使用して、ファイル作成し、動作するようにしてみよう。
- 前単元で学習した、PDF生成などで、画像付きPDFページなどを作成してみよう。