ホームページ >php教程 >php手册 >php9のスーパーグローバル変数の使い方を詳しく解説(3)

php9のスーパーグローバル変数の使い方を詳しく解説(3)

WBOY
WBOYオリジナル
2016-06-21 08:48:37934ブラウズ

今日もphp9のスーパーグローバル変数シリーズの続きです。今日は$_FILEの使い方についてお話します。

まず、$_FILES は、$_POST などと同様に、アップロードされたファイルの入力タグに適しており、次のように、クライアントがアップロードしたファイルに関するさまざまな情報を取得および保存することができます。 :

$_FILES['myFile']['name'] クライアント ファイルの元の名前。
$_FILES['myFile']['type'] ファイルの MIME タイプ。ブラウザがこの情報 (「image/gif」など) をサポートする必要があります。
$_FILES['myFile']['size'] アップロードされたファイルのサイズ (バイト単位)。
$_FILES['myFile']['tmp_name'] ファイルのアップロード後にサーバーに保存される一時ファイル名。通常はシステムのデフォルトです。 php.iniのupload_tmp_dirで指定できますが、putenv()関数で設定しても効果はありません。
$_FILES['myFile']['error'] ファイルのアップロードに関連するエラー コード。 ['error'] は PHP 4.2.0 で追加されました。以下はその説明です: (PHP3.0 以降は定数になります)

したがって、上記の変数を使用して、ユーザーがアップロードしたファイルをバックグラウンドで処理できます。たとえば、写真のみをアップロードできる場合は、$_FILES['myFile']['type'] を通じて制限し、サイズを制限できます。 . $_FILES['myFile']['size'] で指定します 次に、w3school の例を使って $_FILES の具体的な使い方を説明します。

このデモの主な機能は、画像ファイルをアップロードし、サーバー側の関連ディレクトリに保存することです。

HTML コードは次のとおりです:

<html>
<body>

<form action="post.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br/>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>


コードは非常に単純で、ファイル タイプがバックグラウンドで取得される場合は、この名前に対応する値 'file' が $_FILES の基礎となることに注意してください。 _FILES['myFile']['type'] は、フロント デスクの名前に対応する値が 'myFile' である必要があることを示します。そうでない場合は、無効なファイル エラーが報告されます。最後に、背景コードを見てみましょう:

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
/*
* explode(separator,string,limit)
参数 描述
separator 必需。规定在哪里分割字符串。
string 必需。要分割的字符串。
limit 可选。规定所返回的数组元素的最大数目。
*/
$temp = explode(".", $_FILES["file"]["name"]);
//end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。

$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
 ($_FILES["file"]["type"] == "image/jpeg")
 ($_FILES["file"]["type"] == "image/jpg")
 ($_FILES["file"]["type"] == "image/pjpeg")
 ($_FILES["file"]["type"] == "image/x-png")
 ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000)
/*
* in_array(value,array,type)
* in_array() 函数在数组中搜索给定的值。
* 如果给定的值 value 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。
如果没有在数组中找到参数,函数返回 false。
注释:如果 value 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。

*
* move_uploaded_file() 函数将上传的文件移动到新位置。
* move_uploaded_file(file,newloc)
* 本函数检查并确保由 file 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 newloc 指定的文件。*/
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br/>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br/>";
echo "Type: " . $_FILES["file"]["type"] . "<br/>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br/>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br/>";

if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>


主に、explode()、end()、および in_array() の 3 つの関数を使用しており、それらの使い方はすべて簡単に理解できるようになっています。注意すべき点は、ファイルがアップロードされた後、デフォルトで一時ディレクトリに保存されることです。このディレクトリには $_FILES['myFile']['tmp_name'] を通じてアクセスできます。この時点では、それを削除する必要があります。一時ディレクトリから削除するか、別の場所に移動します。そうでない場合は、削除されます。つまり、アップロードが成功したかどうかに関係なく、スクリプトの実行後、一時ディレクトリ内のファイルは必ず削除されます。したがって、この例では、move_uploaded_files() 関数を使用して、ファイルを別の場所にコピーします。この時点で、ファイルのアップロード プロセスは完了します。

最後に、必要に応じて、非常に簡単ですが、ソース コードをダウンロードできます。



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