PHPアップロードの原理と動作実装_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:21:37
オリジナル
841 人が閲覧しました

PHPアップロード原理と動作実装

PHP でファイルをアップロードするための関数ライブラリに関しては、誰もが直接使用できる、よくパッケージ化されたライブラリがインターネット上に多数あります。
この記事はアップロードの原理についてのみ説明しており、簡単なアップロード操作については無視します^_^~
また、サーバーが画像タイプのファイルを受信する機能を制限し、クライアントがウイルス ファイルのサフィックスをアップロードする画像タイプと一致するファイルに悪意を持って変更するなど、セキュリティに関する判断もいくつかあります。
(たとえば、単一ファイルのアップロード、複数ファイルの原則は同じですが、さらにいくつかのトリックがあります)
index.html
コードをコピー
ファイルをアップロード
ファイルをアップロードします:
コードをコピー
1.フォームタグのenctype属性
フォーム内の
enctype="multipart/form-data" は、フォームの MIME エンコードを設定するために使用されます。
デフォルトでは、このエンコード形式は application/x-www-form-urlencoded であり、ファイルのアップロードには使用できません。
multipart/form-dataを使用し、投稿方法がPostの場合のみ、ファイルデータを完全に転送できます。
2. MAX_FILE_SIZE 隠しフィールド
MAX_FILE_SIZE 隠しフィールド (単位: バイト) はファイル入力フィールドの前に配置する必要があり、その値は受信ファイルの最大サイズです。これはブラウザに対する推奨事項であり、PHP もこれをチェックします。
この設定はブラウザ側で簡単にバイパスできるため、この機能を使用して大きなファイルをブロックすることは期待しないでください。 (ただし、利便性を考慮すると、この項目はフォームに追加した方が良いでしょう。ユーザーが大きなファイルをアップロードするのに時間をかけて待っていたのに、ファイルが大きすぎてアップロードに失敗したというトラブルを回避できます。)
upload.php
print_r($_FILES);
?>
次のことがわかります:
コードをコピー
配列
(
[ファイル] => 配列
(
[名前] = & gt; 写真ファイル .jpg
[種類] = & gt; 画像/jpeg
=> [エラー] = & gt; 【サイズ】=>73886
)
)
コードをコピー
3. グローバル変数$_FILESの適用
$_FILES['file']['name'] はアップロードしたファイルの元のファイル名です
$_FILES['file']['type'] はアップロードされたファイルのMIMEタイプです
$_FILES['file']['size'] アップロードされたファイルのサイズ(バイト単位)
$_FILES['file']['tmp_name'] ファイルアップロード後にサーバー上に保存される一時ファイル名()です
$_FILES['file']['error'] ファイルアップロードのエラーコード
4. デフォルトでは、アップロードされたファイルはサーバー上の一時フォルダーに保存され、そのディレクトリは php.ini に設定されます。
php.ini でのファイルのアップロードに関連するいくつかの一般的な設定:
file_uploads ; HTTP 経由でのファイルのアップロードを許可するかどうかを切り替えます。デフォルトはON、つまりオープンです
upload_tmp_dir; サーバー上の一時ファイルが保存されている場所にファイルをアップロードします。 指定しない場合は、システムのデフォルトの一時フォルダーが使用されます。
upload_max_filesize; アップロードできるファイルの最大サイズです。デフォルトは 2M です
post_max_size; は、フォーム内のすべての値を含む、PHP へのフォーム POST を通じて受信できる最大値を指します。デフォルトは8Mです
以下は単一ファイルをアップロードするための完全なコードです。私が考えたように書いたので、ロジックが少し乱雑かもしれません。原理を理解することが最も重要です。
コードをコピー
//アップロードされたファイル情報を取得します
$fileName=$_FILES['ファイル']['名前'];
$fileType=$_FILES['ファイル']['タイプ'];
$fileError=$_FILES['ファイル']['エラー'];
$fileSize=$_FILES['ファイル']['サイズ'];
$tempName=$_FILES['file']['tmp_name'];//一時ファイル名
//アップロードファイルの種類を定義します
$typeList = array("image/jpeg","image/jpg","image/png","image/gif") //許可されるタイプを定義します
if(!is_uploaded_file($tempName)){
//POSTでアップロードされたファイルかどうかを判定します
exit("HTTP POST 経由でアップロードされませんでした");
}その他{
if(!in_array($fileType, $typeList)){
exit("アップロードされたファイルは指定された種類ではありません");
}その他{
if(!getimagesize($tempName)){
//ウイルスファイルの拡張子を画像形式に変更するなど、ユーザーによる悪意のあるファイルのアップロードを防止します
exit("アップロードされたファイルは写真ではありません");
}
}
if($fileError>0){
错 // アップロードファイルエラー番号判定
switch ($fileError) {
ケース 1:
A $ message = "アップロードされたファイルは、php.ini の Upload_max_filesize オプションで制限されている値を超えています。";
休憩;
ケース 2:
$message="アップロードされたファイルのサイズが、HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えています。";
休憩;
ケース 3:
$message="ファイルの一部のみがアップロードされました。";
休憩;
ケース 4:
$message="ファイルはアップロードされていません。";
休憩;
ケース 6:
$message="一時フォルダーが見つかりません。";
休憩;
ケース 7:
$message="ファイルの書き込みに失敗しました";
休憩;
ケース 8:
$message="PHP 拡張機能によりファイルのアップロードが中断されました";
休憩;
}
exit("ファイルのアップロードに失敗しました: ".$fileError);
}その他{
if($fileSize>100000){
’ to ’ s
‐ ‐ ‐ ‐ ‐ ‐ //特定のフォームのアップロードされるファイルのサイズを制限します
exit("アップロードされたファイルはサイズ制限を超えています");
}その他{
//アップロードされたファイルの中国語名の文字化けを避ける
$fileName=iconv("UTF-8", "GBK", $fileName);//iconv によってキャプチャされた文字エンコーディングを utf-8 から gbk に変換して出力します
_ move_uploaded_file($tempName, "uploads/".$fileName)){
传 エコー「ファイルのアップロードは成功しました!」
}その他{
「ファイルのアップロードに失敗しました」 echo 「ファイルのアップロードに失敗しました」;
}
}
}
}
?>
コードをコピー
5. PHP でファイルをアップロードするための一般的な関数: (具体的な使用法は投稿しません。API ドキュメントを読んでください ^_^)
file_exists ファイルまたはディレクトリが存在するかどうかを確認します
is_uploaded_file ファイルが HTTP POST 経由でアップロードされたかどうかを決定します
move_uploaded_file アップロードしたファイルを新しい場所に移動します
is_writable 指定されたファイル名が書き込み可能かどうかを判断します
iconv 文字コード変換
getimagesize 画像ファイルかどうかを確認する(他の種類のファイルはサフィックス名を変更しても検出可能)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/854420.html技術記事 PHP アップロードの原理と動作実装 PHP アップロード ファイルの関数クラス ライブラリについては、インターネット上に多数の完成したパッケージがあり、誰でもそれらを直接使用できます。 この記事では、アップロードの原理と簡単さについて説明します...
関連ラベル:
ソース:php.cn
前の記事:CentOS で PHP を 5.4 から 5.5 にアップグレードする、centosphp5.45.5_PHP チュートリアル 次の記事:PHPのreturn文のもう一つの関数、return文_PHPチュートリアル
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!