最初に、この章には多くの内容が含まれており、比較的難しいことを述べておきます。自分自身と戦う姿勢が必要です。微妙な点を見逃さず、どんどん練習することが大切です。
学習は山に登るようなもので、最初に小さな目標を設定し、それから粘り強く登っていき、最終的には頂上に到達する必要があります。
上記の 2 つのアドバイスを注意深く検討してください
1. 私の準備の説明。
エディタ: sublime text3 (どのエディタを使用するかは好みによって異なります)
サーバー構築: phpstudy2014を使用してサーバーを構築します。サーバーファイルは、コンピューターのDドライブのwwwファイルに保存されています。 (phpstudy をインストールすると www ファイルが自動的に生成されます。それをどのディスクにインストールするかはユーザーが決定します)。 phpstudy を実行し、ブラウザのアドレス バーに「localhost」と入力して、サーバー上のファイルにアクセスします。
ファイルをアップロードするプロセス: ブラウザがクライアントにファイルをアップロードし、送信をクリックすると、ファイルは処理のためにサーバーのphpファイルに送信され、phpはアップロードされたファイルをサーバーに保存します。
2. フォームを作成します
私のHTMLコードをご覧ください
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 ファイルを作成します。
ファイルをアップロードした後の効果は次のとおりです:
アップロードされた各ファイルには、名前、タイプ、サイズ、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 サイト (m.sbmmt.com) に注目してください。