1. アップロードの原理と構成
1.1原則
クライアントファイルをサーバーにアップロードし、サーバーファイル(一時ファイル)を指定されたディレクトリに移動します。
1.2 クライアント設定
必須: フォームページ (アップロードファイルを選択);
具体的には、送信方法はPOST、enctype="multipart/form-data"属性を追加、どちらも必須です(ただし、メリットとデメリットが混在しており、ここではアップロード方法やアップロード後の呼び出しなども制限されています)。 、後述します)リーリー
1 つ目はフォーム ページ (フロントエンドの問題は自動的に無視してください...)、もう 1 つは入力での type="file" の使用です (強力な拡張を反映しています)。 PHPなど)。その後、アクションを実行します
リーリー
まずはprint_r($_FILES)の情報を見てみましょうリーリー
得られるのは 2 次元配列です。その使用方法はすべて基本的なものです (実際には、次元を削減してから使用するのが好きです)。基本的には一目で理解できる内容であり、冗長ではありません。重要な点は 2 つあります: tmp_name 一時ファイル名 (コード名。後で使用できます)。
次に、エラー情報を使用してユーザーにフィードバックする doAction の最後の部分を見てみましょう。説明する必要があるのは、エラーが報告される理由とエラー情報の内容です。1.3 エラー報告について
--エラー報告の理由
基本的に、ファイルをアップロードするためのサーバーの構成を超えているか、準拠していません。では、サーバー側の構成は何ですか?
まず、私たちが使用したものをアップロードすることを検討してください?投稿、アップロード
それでは、php.ini で次のいくつかの項目を探してください:
リーリーその他の関連構成
max_exectuion_time=-1—プログラムがサーバー リソースを占有しないようにするための最大実行時間。
max_input_time=60max_input_nesting_level=64—入力ネストの深さ
memory_limit=128M——単一スレッドの最大独立メモリ使用量
要するに、すべてはリソースの割り当てに関するものです。
--エラー番号
以下の(怠惰な)引用は http://blog.sina.com.cn/s/blog_3cdfaea201008utf.html からです
UPLOAD_ERR_OK 値: 0; エラーは発生せず、ファイルは正常にアップロードされました。
UPLOAD_ERR_INI_SIZE 値: 1; アップロードされたファイルは、php.ini の Upload_max_filesize オプションの制限を超えています。
UPLOAD_ERR_FORM_SIZE 値: 2; アップロードされたファイルのサイズが、HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えています。UPLOAD_ERR_PARTIAL 値: 3; ファイルの一部のみがアップロードされました。
UPLOAD_ERR_NO_FILE 値: 4; ファイルはアップロードされませんでした。
注: このエラー メッセージは、最初の手順、つまり一時フォルダーにアップロードするときにアップロードされる情報であり、移動またはコピーするときではありません。
2. アップロード関連の制限
2.1 クライアントの制限
リーリー ここでは、アップロードされるファイルのサイズとタイプを制限するために input 属性が使用されていますが、私の個人的な感覚では、第一に HTML コードが「表示」され、第二に、機能しないことがよくあります (理由は見つかりませんでした)。しかし、最初のもののせいで、私もそれをあきらめて、ただ知りたいと思っています。 2.2 サーバー側の制限事項
主な制限はサイズと種類で、もう 1 つは方法です。
リーリーここでは、具体的な実装がコメントされています。実際に各ステップを自分で試すことができます。これは非常に興味深いです。
2.3 梱包
機能
リーリー電話する
リーリー
3. 複数ファイルのアップロードの実装3.1 単一ファイルのパッケージ化を利用する
リーリー
リーリー
ここでのアイデアは、print_r($_FILES) からそれを見つけることです。これを印刷すると、それをトラバースして使用するだけです。
上記の関数の定義を変更し、いくつかのデフォルト値を与えます
関数 UploadFile($fileInfo,$path="アップロード",$allowExt=array('jpeg','jpg','png','tif'),$maxSize=10485760){
このように、シンプルはシンプルですが、いくつか問題があります。
通常4枚の写真をアップロードする場合は問題ありませんが、途中で機能の終了が有効になるとすぐに停止してしまい、他の写真をアップロードできなくなります。
3.2アップグレード版パッケージ
複数または単一のファイルアップロードのためのカプセル化の実装を目的としています
まずこのような静的ファイルを作成します
リーリー$_FILES を印刷
リーリー3次元配列を取得できます。
複雑ですが、通常の方法で複雑で、すべての値が一緒になっているため、値を取得するのに非常に便利です。 !
そのため、最初にファイル情報を取得し、それを単一のファイル処理情報に変換します
リーリー次に、前の終了エラーについては、ここで res を使用します
。 リーリー小さいのが2つ入っています
リーリー次に静的モードで、multiple 属性を使用して複数のファイルを入力します。 リーリー
アクション6を実行リーリー
このようないくつかのファイルは、ファイルをアップロードするという比較的強力なプロセス指向の機能を実現できます (学ぶのは悲しいことです...)。4. オブジェクト指向のファイルアップロード
(あまり興奮して書きません...まずここに貼り付けてから話してください...
リーリー 4. ダウンロード对于浏览器不识别的,可以直接下载,但对于能识别的,需要多一两步
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <body> <a href="1.rar">下载1.rar</a> <br /> <a href="1.jpg">下载1.jpg</a> <br /> <a href="doDownload.php?filename=1.jpg">通过程序下载1.jpg</a> <br /> <a href="doDownload.php?filename=../upload/nv.jpg">下载nv.jpg</a> <?php ?> </body> </html> <?php $filename=$_GET['filename']; header('content-disposition:attachment;filename='.basename($filename)); header('content-length:'.filesize($filename)); readfile($filename);
------------------总结-----------------------
a883eb9f3f57796a07128c7d29e943d2
e6b689fdce2c30da7d31e1a121bdd0cd076402276aae5dbec7f672f8f4e5cc81
二维数组的降维处理;
$_FILES变量
move_upload_file();copy();
tmp_name临时文件;
拓展名的提取;
真实图片的验证;
唯一文件名的生成;
函数封装以及调用;
利用单个文件函数实现多文件上传;
小功能的封装;
多文件的遍历;
面向对象的开发过程;