ホームページ バックエンド開発 PHPの問題 PHPでファイルをアップロードしてデータベースに保存する方法

PHPでファイルをアップロードしてデータベースに保存する方法

Apr 06, 2023 am 08:54 AM

ファイルのアップロードは、最新のアプリケーションでは非常に一般的な機能であり、Web アプリケーションも例外ではありません。 Web アプリケーションでは、ユーザーが写真やドキュメントなどのファイルをアップロードできるようにする必要がある場合があります。PHP は、ファイルのアップロード操作を簡単に処理できる人気のあるサーバー側スクリプト言語です。今回はPHPを使ってアップロードしたファイルをデータベースに保存する方法を解説します。

  1. HTML フォームの準備

まず、ユーザーがアップロードするファイルを選択できるように HTML フォームが必要です。 HTML5 の 要素を使用してフォームを構築します。HTML コードは次のとおりです:

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="上传文件" name="submit">
</form>
ログイン後にコピー

form タグの action 属性は、ファイル アップロード処理スクリプトの URL を指定します。そして、method 属性は使用される HTTP メソッドを指定します。アップロードされたファイルをサーバーに保存する必要があるため、POST メソッドを使用します。

enctype 属性は、使用するエンコード タイプを指定します。ファイルをアップロードできるようにするために、multipart/form-data を指定します。

要素は、アップロードするファイルを選択するために使用されます。ユーザーが選択したファイルをサーバーにアップロードできるように、送信ボタンも追加しました。

  1. サーバー側処理スクリプト

次に、ファイルのアップロード要求を処理する PHP スクリプトを作成する必要があります。このスクリプトをupload.phpファイルに記述します。このスクリプトでは、まずアップロードされたファイルが存在するかどうか、およびアップロードが成功したかどうかを確認します。アップロードが成功すると、アップロードされたファイルからデータが取得され、データベースに保存されます。

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "文件是一个图片类型 - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "文件不是一个图片类型.";
    $uploadOk = 0;
  }
}

// Check if file already exists
if (file_exists($target_file)) {
  echo "已存在同名文件.";
  $uploadOk = 0;
}

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "文件太大了.";
  $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "只支持JPG, JPEG, PNG和GIF文件类型.";
  $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
  echo "文件上传失败.";

// if everything is ok, try to upload file
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "文件 ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). "已经被上传.";
    
    // 保存文件数据到数据库中 
    
  } else {
    echo "文件上传发生错误.";
  }
}
?>
ログイン後にコピー

このスクリプトでは、$target_dir 変数でファイルをアップロードするディレクトリを指定します。 $target_file 変数は、保存先のファイル名を指定します。 $_FILES 変数には、アップロードされたファイルのデータが含まれます。 Basename() 関数を使用してファイル名を取得し、strto lower() 関数を使用して拡張子を小文字に変換します。 $uploadOk 変数はアップロードが成功したかどうかを追跡するために使用され、$imageFileType 変数はアップロードされたファイルの種類を保存します。

getimagesize() 関数を使用して、アップロードされたファイルが画像タイプであるかどうかを確認します。画像タイプの場合は、ファイルの MIME タイプを出力します。そうでない場合は、$uploadOk 変数を 0 に設定し、アップロードが失敗したことを示します。

次に、ファイルがすでに存在するかどうかを確認します。存在する場合は、$uploadOk 変数を 0 に設定し、アップロードが失敗したことを示します。

ファイル サイズが要件を満たしているかどうかも確認します。 500 KB より大きい場合は、$uploadOk 変数を 0 に設定し、アップロードが失敗したことを示します。

最後に、ファイル タイプが要件を満たしているかどうかを確認します。現在サポートされているのは、JPG、JPEG、PNG、GIF タイプのみです。そうでない場合は、$uploadOk 変数を 0 に設定し、アップロードが失敗したことを示します。

すべてのチェックに合格した場合は、アップロードされたファイルを指定されたディレクトリに移動してみます。移動が成功すると、ファイルがアップロードされた旨のメッセージが出力され、アップロードされたファイルのデータがデータベースに保存されます。それ以外の場合は、エラーメッセージが出力されます。

  1. ファイル データをデータベースに保存する

ファイルが正常にアップロードされたら、ファイル データをデータベースに保存する必要があります。この例では、id、fileName、fileData の 3 つのフィールドを持つデータベース テーブルを作成します。

この機能を実行するには、データベース接続と $sql ステートメントが必要です。 $sql ステートメントでは、ファイル名とファイル データの両方を挿入する必要があります。 PHP では、fopen()、fread()、および fclose() 関数を使用してファイル データを処理できます。したがって、ファイル データを $sql ステートメントに挿入するには、まず fopen() 関数を使用してファイルを開き、次に fread() 関数を使用してファイルからデータを読み取り、最後に fclose() 関数を使用してファイルを開く必要があります。ファイルを閉じます。コードは次のとおりです。

<?php
$conn = new mysqli("localhost", "root", "", "test");
if ($conn->connect_error) {
  die("连接数据库失败: " . $conn->connect_error);
}

// Check server connection
if ($conn->connect_error) {
  die("连接数据库失败: " . $conn->connect_error);
} 

$fileName = $_FILES["fileToUpload"]["name"];
$fileData = "";

// Open the file for reading
$file = fopen($target_file, "r");

// Read from the file until the end
while(!feof($file)) {
  $fileData .= fread($file, 8192);
}

// Close the file
fclose($file);

// Prepare SQL statement
$sql = "INSERT INTO upload_files (fileName, fileData) VALUES ('$fileName', '$fileData')";

if ($conn->query($sql) === TRUE) {
  echo "上传成功!";
} else {
  echo "上传失败:" . $conn->error;
}

$conn->close();
?>
ログイン後にコピー

このスクリプトでは、ファイルを開き、 fread() 関数を使用してファイルのすべてのデータを読み取ります。このデータは $fileData 変数に保存され、アップロードされた新しいファイル データは $sql ステートメントに挿入されます。

今回は、アップロードしたファイルをデータベースに保存する機能を実装しました。

概要

この記事では、PHP を使用してファイルをアップロードし、ファイル データをデータベースに保存する方法を紹介しました。まず HTML フォームから始めて、サーバー側の処理スクリプトを作成し、アップロードされたファイル データをデータベースに保存しました。この例は、ファイルをデータベースにアップロードして保存する完全なプロセスを示しており、Web 開発者にとって役立つはずです。

以上がPHPでファイルをアップロードしてデータベースに保存する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

非ブロッキング操作にPHPで非同期タスクを使用する方法は? 非ブロッキング操作にPHPで非同期タスクを使用する方法は? Mar 10, 2025 pm 04:21 PM

この記事では、Webアプリケーションの応答性を高めるために、PHPでの非同期タスクの実行について説明します。 メッセージキュー、非同期フレームワーク(Reactphp、Swoole)、およびバックグラウンドプロセスなどの方法を詳しく説明し、Efficienのベストプラクティスを強調しています

PHPにメッセージキュー(rabbitmq、redis)を実装する方法は? PHPにメッセージキュー(rabbitmq、redis)を実装する方法は? Mar 10, 2025 pm 06:15 PM

この記事では、RabbitMQとRedisを使用してPHPでメッセージキューを実装する詳細を示します。 それは、それらのアーキテクチャ(AMQP対インメモリ)、機能、および信頼性メカニズム(確認、トランザクション、永続性)を比較します。デザインのベストプラクティス、エラー

最新のPHPコーディング基準とベストプラクティスは何ですか? 最新のPHPコーディング基準とベストプラクティスは何ですか? Mar 10, 2025 pm 06:16 PM

この記事では、PSRの推奨事項(PSR-1、PSR-2、PSR-4、PSR-12)に焦点を当てた現在のPHPコーディング基準とベストプラクティスを検証します。 一貫したスタイリング、意味のある命名、EFFを通じてコードの読みやすさと保守性を改善することを強調しています

リフレクションを使用してPHPコードを分析および操作する方法は? リフレクションを使用してPHPコードを分析および操作する方法は? Mar 10, 2025 pm 06:12 PM

この記事では、PHPの反射APIについて説明し、クラス、方法、およびプロパティのランタイム検査と操作を可能にします。 一般的なユースケース(ドキュメンテーション生成、ORM、依存関係注入)とパフォーマンスオーバーヘアに対する注意の詳細

PHP拡張機能とPECLを使用するにはどうすればよいですか? PHP拡張機能とPECLを使用するにはどうすればよいですか? Mar 10, 2025 pm 06:12 PM

この記事では、PHP拡張機能のインストールとトラブルシューティングの詳細で、PECLに焦点を当てています。 インストール手順(検索、ダウンロード/コンパイル、サーバーの再起動、再起動)、トラブルシューティングテクニック(ログのチェック、インストールの確認、

PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 PHP 8 JIT(Just-in-Time)コンピレーション:パフォーマンスの向上方法。 Mar 25, 2025 am 10:37 AM

PHP 8のJITコンピレーションは、頻繁に実行されるコードをマシンコードにコンパイルし、重い計算でアプリケーションに利益をもたらし、実行時間を短縮することにより、パフォーマンスを向上させます。

PHPでメモリ最適化手法を使用する方法は? PHPでメモリ最適化手法を使用する方法は? Mar 10, 2025 pm 04:23 PM

この記事では、PHPメモリの最適化について説明します。 適切なデータ構造を使用し、不必要なオブジェクトの作成を回避し、効率的なアルゴリズムを採用するなどの手法について詳しく説明しています。 一般的なメモリリークソース(例:除去されていない接続、グローバルv

PHPエコシステムとコミュニティを最新の状態に保つにはどうすればよいですか? PHPエコシステムとコミュニティを最新の状態に保つにはどうすればよいですか? Mar 10, 2025 pm 06:16 PM

この記事では、PHPエコシステムに最新の状態を維持するための戦略を探ります。 公式チャンネル、コミュニティフォーラム、会議、オープンソースの貢献を利用することを強調しています。 著者は、新機能と

See all articles