ホームページ バックエンド開発 PHPチュートリアル PHPファイルアップロードの詳細な紹介

PHPファイルアップロードの詳細な紹介

Feb 27, 2017 am 09:24 AM

最初に、この章には多くの内容が含まれており、比較的難しいことを述べておきます。自分自身と戦う姿勢が必要です。微妙な点を見逃さず、どんどん練習することが大切です。

学習は山に登るようなもので、最初に小さな目標を設定し、それから粘り強く登っていき、最終的には頂上に到達する必要があります。

上記の 2 つのアドバイスを注意深く検討してください

1. 私の準備の説明。

エディタ: sublime text3 (どのエディタを使用するかは好みによって異なります)

サーバー構築: phpstudy2014を使用してサーバーを構築します。サーバーファイルは、コンピューターのDドライブのwwwファイルに保存されています。 (phpstudy をインストールすると www ファイルが自動的に生成されます。それをどのディスクにインストールするかはユーザーが決定します)。 phpstudy を実行し、ブラウザのアドレス バーに「localhost」と入力して、サーバー上のファイルにアクセスします。

ファイルをアップロードするプロセス: ブラウザがクライアントにファイルをアップロードし、送信をクリックすると、ファイルは処理のためにサーバーのphpファイルに送信され、phpはアップロードされたファイルをサーバーに保存します。

2. フォームを作成します

私のHTMLコードをご覧ください

PHPファイルアップロードの詳細な紹介

enctype
Form要素の構文では、EncType属性を使用して、送信時に使用するブラウザを指定します。サーバーにデータを送り返すエンコーディングの種類。 enctype には 3 つのタイプがあります:

1. application/x-www-form-urlencoded: フォーム データは名前と値のペアとしてエンコードされます。これは標準のエンコード形式です。

2. multipart/form-data: フォーム データはメッセージとしてエンコードされ、ページ上の各コントロールはメッセージの一部に対応します。

3. text/plain: フォーム データは、コントロールや書式設定文字を含まないプレーン テキストでエンコードされます。

補足 (ちょっと見てください): ORM の enctype 属性は、一般的に使用される 2 つのメソッドです: application/x-www-form-urlencoded と multipart/form-data です。デフォルトは application/x- です。 www-form-urlencoded。 アクションが get の場合、ブラウザーは x-www-form-urlencoded エンコーディング メソッドを使用してフォーム データを文字列 (name1=value1&name2=value2...) に変換し、その文字列を URL の末尾に追加して分割します。 ? を付けて、この新しい URL をロードします。 アクションがポストされると、ブラウザーはフォーム データを http 本文にカプセル化し、それをサーバーに送信します。 type=file コントロールがない場合は、デフォルトの application/x-www-form-urlencoded を使用してください。 ただし、type=file がある場合は、multipart/form-data が使用されます。ブラウザはフォーム全体をコントロールユニットに分割し、Content-Disposition (フォームデータまたはファイル)、Content-Type (デフォルトは text/plain)、name (コントロール名)、および区切り文字の追加 (境界) などの情報を追加します。 。

ちょっとわかりにくいですね。

要するに、input タグに type=file がある場合は enctype=multipart/form-data という 2 つの文を覚えておいてください。 type=file がない場合は、通常、application/x-www-form-urlencoded が使用されます。

ファイルをアップロードする場合、サーバーにアップロードする前にデータをある程度変換する必要があります。 application/x-www-form-urlencoded と multipart/form-data の違いは、変換エンコード方法です。

3. アップロードされたファイルを処理するための php ファイルを作成します。

PHPファイルアップロードの詳細な紹介

ファイルをアップロードした後の効果は次のとおりです:

PHPファイルアップロードの詳細な紹介

アップロードされた各ファイルには、名前、タイプ、サイズ、tmp_name、その他の情報が含まれます。ファイルがアップロードされると、ファイル関連の情報が FILES 配列変数に格納されます。 _FILES["myfile"]["name"] は、多次元配列にアクセスすることと同じです。FILES は、まず myfile という名前の入力フォームによってアップロードされたファイル データを取得し、次に名前、タイプ、サイズ、エラーなどのデータにアクセスします。 _FILES["myfile"]["error"] は、アップロードされるファイルのサイズ制限を超えるなど、ファイルが正常にアップロードされない状況を処理するために使用されます。 FILES["myfile"]["error"]=0 の場合、ファイルは正常にアップロードされたことを意味します。 _FILES["myfile"]["error"]>0 は、ファイルが正常にアップロードされなかったことを意味します。

FILES["myfile"]["error"]=1 アップロードされたファイルはサーバーの容量サイズを超えるなど、サーバーの制限を超えています。 _FILES["myfile"]["error"]=2 ブラウザのアップロード制限を超えています $_FILES["myfile"]["error"]=3 ファイルの一部のみがアップロードされます

FILES["myfile"]["エラー”]=4ファイルがアップロードされていません。 _FILES["myfile"]["error"] は 5、6、7、または 8 にすることもできます。ここでは詳しく説明しませんが、0 より大きい場合はアップロード中にエラーがあることを意味します。ファイル。

アップロード制限

通常、サーバーはアップロードするファイルのサイズまたは種類を制限します。上記のphpコードを元に、アップロードするファイルのコードに制限を追加します。

まず、いくつかの関数の使用法に慣れてください:

explode() 関数は、文字列を分割するために使用されます。たとえば、explode(".","aaa.HTML") は、文字列をポイント位置で「aaa」と「HTML」の 2 つの文字列に分割します。同じ配列に連続して格納されます。

end() は配列の最後の要素の値を取得します。

in_array() は、配列内の要素を検索して存在するかどうかを確認し、存在する場合は true を返し、存在しない場合は false を返します。

<?php
//第一步:明确服务器规定上传至服务器的文件类型。这里我们只允许上传以下类型的图片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允许上传的图片后缀
//第二部:获取上传的文件名称,通过explorde()函数将其分割成字符串形式的数组。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["file"]["size"];

$extension = end($temp);   // end函数用于获取数组中最后一个元素的值。
//第三步:列出上传文件需要满足的条件
if ((($_FILES["myfile"]["type"] == "image/gif")
|| ($_FILES["myfile"]["type"] == "image/jpeg")
|| ($_FILES[myfile"]["type"] == "image/jpg")
|| ($_FILES["myfile"]["type"] == "image/pjpeg")
|| ($_FILES["myfile"]["type"] == "image/x-png")
|| ($_FILES["myfile"]["type"] == "image/png"))
&& ($_FILES["myfile"]["size"] < 204800)  // 小于 200 kb
&& in_array($extension, $allowedExts))
  //in_array表示在$allowedExts数组中查找$extension这个字符串
{
  if ($_FILES["myfile"]["error"] > 0)
  {
    echo "错误:: " . $_FILES["myfile"]["error"] . "<br>";
    //举个例子服务器空间不足,文件只能上传部分就会出现错误。
  }
  else
  {
    echo "上传文件名: " . $_FILES["myfile"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["myfile"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["myfile"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["myfile"]["tmp_name"] . "<br>";
  }
}
else
{
  echo "非法的文件格式";
}
?>
ログイン後にコピー


4. アップロードしたファイルを保存します

ファイルがアップロードされると、一時的な場所に保存されます。スクリプトが終了すると消えます。サーバーに永続的に保存したい場合は、別の場所に保存する必要があります。

. file_exists(“upload/” . FILES[“file”][“name”]) は、ファイルまたはディレクトリが存在するかどうかを確認します。 .moveuploadedfile(_FILES["file"]["tmp_name"], "upload/" . $_FILES["myfile"]["name"]);アップロードされたファイルを一時的な場所からサーバー スペースに移動します。

<?php
//第一步:明确服务器规定上传至服务器的文件类型。这里我们只允许上传以下类型的图片。
$allowedExts = array("gif", "jpeg", "jpg", "png");// 允许上传的图片后缀
//第二部:获取上传的文件名称,通过explorde()函数将其分割成字符串形式的数组。
$temp = explode(".", $_FILES["myfile"]["name"]);
echo $_FILES["myfilefile"]["size"];
$extension = end($temp);   // end函数用于获取数组中最后一个元素的值。
//第三步:列出上传文件需要满足的
if ((($_FILES["myfile"]["type"] == "image/gif")
|| ($_FILES["myfile"]["type"] == "image/jpeg")
|| ($_FILES["myfile"]["type"] == "image/jpg")
|| ($_FILES["myfile"]["type"] == "image/pjpeg")
|| ($_FILES["myfile"]["type"] == "image/x-png")
|| ($_FILES["myfile"]["type"] == "image/png"))
&& ($_FILES["myfile"]["size"] < 204800)  // 小于 200 kb
&& in_array($extension, $allowedExts))//in_array表示在$allowedExts数组中查找$extension这个字符串
{
  if ($_FILES["myfilefile"]["error"] > 0)
  {
    echo "错误:: " . $_FILES["myfile"]["error"] . "<br>";
  }
  else
  {
    echo "上传文件名: " . $_FILES["myfile"]["name"] . "<br>";
    echo "文件类型: " . $_FILES["myfile"]["type"] . "<br>";
    echo "文件大小: " . ($_FILES["myfile"]["size"] / 1024) . " kB<br>";
    echo "文件临时存储的位置: " . $_FILES["myfile"]["tmp_name"] . "<br>";

    // 判断当期目录(即www文件夹中)下的 upload 目录(自己创建,名字自取)是否存在该文件
    // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
    if (file_exists("upload/" . $_FILES["myfile"]["name"]))
    {
      echo $_FILES["myfile"]["name"] . " 文件已经存在。 ";
    }
    else
    {
      // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
      move_uploaded_file($_FILES["myfile"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);//
      echo "文件存储在: " . "upload/" . $_FILES["myfile"]["name"];
    }
  }
}
else
{
  echo "非法的文件格式";
}
?>
ログイン後にコピー

上記は PHP ファイルのアップロードの詳細な紹介です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles