HTTP POSTでファイルをアップロードして保存する|PHP
HTTP POSTでアップロードしたファイルをPHPで受信・保存する方法です。
アップロード処理で使用するPHP関数
is_uploaded_file()
アップロードされたファイルかどうかを調べます。アップロードされたファイルはテンポラリとして保存されます。なので、$_FILES['imagefile']['tmp_name']
のようにtmp_name
を指定します。
move_uploaded_file()
アップロードされたファイルを新しい位置に移動します。
サンプル
本サンプルはアップロードされた画像ファイルをサーバーに保存し、そのパスをデータベースに保存します。
<!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();
}
$checkkey_value
は正しいフォームから送られた要求かどうかを判定するための値です。