PHP ファイルのアップロード技術を本当にマスターしましたか?この記事には、php ファイルのアップロードに関する関連情報がまとめられています。興味のある方は参考にしてください。
まず最初に、この章は内容が多く、理解する必要があることをお断りしておきます。それは自分と戦う姿勢。微妙な点を見逃さず、どんどん練習することが大切です。
学習は山に登るようなもので、最初に小さな目標を設定し、それから粘り強く登っていき、最終的には頂上に到達する必要があります。
上記 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 です。 -フォームURLエンコード。 アクションが 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 つの文字列の場合、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ファイルのアップロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。