ホームページ  >  記事  >  バックエンド開発  >  PHPファイルアップロードの詳細な紹介

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

黄舟
黄舟オリジナル
2017-02-27 09:24:542367ブラウズ

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

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

上記の 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 までご連絡ください。