【PHP】フォームでファイルを送信する方法

フォームで履歴書などのファイルを送信できるようにします。inputタグにtype="file"属性を付与することで、ファイルをアップロードする入力欄になります。今回はPHPのファイルの取扱まで簡単に説明します。

HTML

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ファイル送信</title>
</head>
<body>
    <form method="post" action="" enctype="multipart/form-data">
        <input type="file" name="file" >
        <input type="submit">
    </form>

</body>
</html>

CSSを当てていなので飾りっ気のない見た目ですが使用上は問題ないのでこのまま使います。

フォームタグにある「enctype="multipart/form-data"」は複数の種類のデータを一度に扱えるようにするためのコードでファイルを送信するときはこれが必要です。

PHP

上記のHTMLに、POSTリクエスト時の処理を行うコードを追記します。

<?php
if($_SERVER['REQUEST_METHOD'] =="POST") {
	require_once __DIR__ . '/form.php';
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ファイル送信</title>
</head>
<body>
    <form method="post" action="" enctype="multipart/form-data">
        <input type="file" name="file" >
        <input type="submit">
    </form>

</body>
</html>
<?php
//ここでファイルの処理をするのですが、var_dumpで送信されたファイル中身を確認してみます。
var_dump($_FILES['file'])
?>

index.phpを開いてファイルを選択、送信ボタンを押すと送信されたデータファイル名やサイズを確認することができます。

フォームで送信されたデータは一時フォルダに保管されますので、PHPでは一時保管されているファイルのpathを指定してファイルの処理を行います。

送信されたファイルは

$_FILES

で取得できます。

また、ファイルのpathは

$filepath=$_FILES["file"]["tmp_name"]

で取得できます。

指定の場所にファイルを保存する

指定のフォルダに保存するにはフォームPHPを下記のようにします。

<?php
//ファイルの保存先を指定
$setDir = '/var/www/files/';

$filename = $_FILES['file']['name']
move_uploaded_file($_FILES['file']['tmp_name'], $setDir.$filename);
?>

実際の運用にはエラー処理が必要になるのでご注意ください。

GoogleDriveに保存する場合

GoogleDriveに送信するためのPHPを作成していない方は、こちらの記事を参照してください。

【PHP】フォームでファイルをGoogle Driveに アップロードする方法 (GoogleDrive API 使用)

form.phpを下記に変更します。

<?php
//GoogleDriveアップロードのPHPを読み込む
require_once __DIR__ . '/uploaddrive.php';  
$filePath = $_FILES["file"]["tmp_name"]
uploadFile($filePath,"Googleドライブのフォルダ名")
?>

エラー処理やセキュリティー対策等を行う必要がありますが、基本的な動作確認はできると思いますので参考にしていただければと思います。

PHP

Posted by Next-k