English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

簡単にphpのファイルアップロード機能を実現

PHP ファイルアップロード

PHPを使うことで、ファイルをサーバーにアップロードすることができます。

本章の例は test プロジェクトの下で完成しており、ディレクトリ構造は以下の通りです:

test
|-----upload             # ファイルアップロードのディレクトリ
|-----form.html          # フォームファイル
|-----upload_file.php    # php アップロードコード

ソースコードのダウンロード:ファイルアップロード

ファイルアップロードフォームの作成
ユーザーがフォームからファイルをアップロードできるのは非常に便利です。
以下はアップロードファイルのHTMLフォームの例です:

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
 <label for="file">ファイル名:</label>
 <input type="file" name="file" id="file"><br>
 <input type="submit" name="submit" value="提交">
</form>
</body>
</html>

以下のコードを form.html ファイルに保存してください。
上記のHTMLフォームに関するいくつかの注意点を以下に示します:

1.<form> タグの enctype 属性は、フォームを送信する際にどのコンテンツタイプを使用するかを指定します。フォームがバイナリデータ(例えばファイルの内容)を必要とする場合、"multipart"を使用してください。/form-data"。
2.<input> タグの type="file" 属性は、入力をファイルとして処理するように指定します。例えば、ブラウザでプレビュー中に、入力フィールドの横にブラウザボタンが表示されます。
注:ユーザーがファイルをアップロードできるのは大きなセキュリティリスクです。信頼できるユーザーのみにファイルアップロード操作を許可してください。

アップロードスクリプトの作成
"upload_file.php" ファイルにはアップロードファイルのコードが含まれています:

<?php
if ($_FILES["file"]["error"] > 0)
{
 echo "エラー:" . $_FILES["file"]["error"] . "<br>";
}
else
{
 echo "アップロードファイル名: " . $_FILES["file"]["name"] . "<br>";
 echo "ファイルタイプ: " . $_FILES["file"]["type"] . "<br>";
 echo "ファイルサイズ: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
 echo "ファイルの一時的な保存場所: " . $_FILES["file"]["tmp_name"];
}
?>

PHPのグローバル配列 $_FILESを使用して、クライアントのコンピュータからリモートサーバーにファイルをアップロードできます。
最初の引数はフォームの input name です。2番目のインデックスは "name"、"type"、"size"、"tmp_name"、または "error" ができます。以下のようになります:
$_FILES["file"]["name"] - アップロードされるファイルの名前
$_FILES["file"]["type"] - アップロードされるファイルのタイプ
$_FILES["file"]["size"] - ファイルのサイズ、バイト単位で計算
$_FILES["file"]["tmp_name"] - サーバー上に保存されているファイルの一時的なコピーの名前
$_FILES["file"]["error"] - ファイルアップロードで発生するエラーコード

これは非常にシンプルなファイルアップロード方法です。セキュリティの観点から、どのユーザーがファイルをアップロードできるかの制限を追加すべきです。

アップロード制限
このスクリプトでは、ファイルアップロードの制限を追加しました。ユーザーは .gif、.jpeg、.jpg、.png ファイルのみをアップロードでき、ファイルサイズは 200 kB:

<?php
// アップロード可能な画像の拡張子
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);  // ファイルの拡張子を取得
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小さい 200 kb
&& in_array($extension, $allowedExts))
{
 if ($_FILES["file"]["error"] > 0)
 {
 echo "エラー:: " . $_FILES["file"]["error"] . "<br>";
 }
 else
 {
 echo "アップロードファイル名: " . $_FILES["file"]["name"] . "<br>";
 echo "ファイルタイプ: " . $_FILES["file"]["type"] . "<br>";
 echo "ファイルサイズ: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
 echo "ファイルの一時的な保存場所: " . $_FILES["file"]["tmp_name"];
 }
}
else
{
 echo "不正なファイル形式";
}
?>

アップロードされたファイルの保存
上記の例では、アップロードされたファイルの一時的なコピーがサーバーのPHP一時フォルダーに作成されます。
この一時的なコピーファイルはスクリプト終了時に削除されます。アップロードされたファイルを保存するには、別の場所にコピーする必要があります:

<?php
// アップロード可能な画像の拡張子
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);  // ファイルの拡張子を取得
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小さい 200 kb
&& in_array($extension, $allowedExts))
{
 if ($_FILES["file"]["error"] > 0)
 {
 echo "エラー:: " . $_FILES["file"]["error"] . "<br>";
 }
 else
 {
 echo "アップロードファイル名: " . $_FILES["file"]["name"] . "<br>";
 echo "ファイルタイプ: " . $_FILES["file"]["type"] . "<br>";
 echo "ファイルサイズ: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
 echo "ファイルの一時的な保存場所: " . $_FILES["file"]["tmp_name"] . "<br>";
 // 判断当前目录下的 upload 目录是否存在该文件
 // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
 if (file_exists("upload/" . $_FILES["file"]["name"]))
 {
 echo $_FILES["file"]["name"] . " ファイルは既に存在しています。 ";
 }
 else
 {
 // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
 echo "ファイルは以下の場所に保存されています: " . "upload/" . $_FILES["file"]["name"];
 }
 }
}
else
{
 echo "不正なファイル形式";
}
?>

上記のスクリプトはファイルが存在するかどうかを確認し、存在しない場合、ファイルを「upload」ディレクトリにコピーします。
ファイルアップロードのデモ操作は以下の通りです:

これで本記事の全てが終わりです。皆様の学習に役立つことを願っています。また、ナイアラ教程を多くの皆様にサポートしていただけると嬉しいです。

声明:本記事の内容はインターネットから取得しており、著作権者所有、インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、本サイトは所有権を有しておらず、人工的な編集は行われていません。著作権侵害が疑われる内容がある場合は、メールで notice#w までお知らせください。3codebox.com(メールを送信する際、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとれましたら、本サイトは即座に侵害疑いのコンテンツを削除します。

おすすめ