PHP実現ファイルアップロード


PHPファイルアップロード、php.iniの構成項目は次のとおりです.
コンフィギュレーション・アイテム
デフォルト
構成の説明
file_uploads
ON
PHPスクリプトはHTTPファイルのアップロードを受け入れることができますか
upload_max_filesize
2M
PHP処理のアップロードファイルサイズの最大値を制限します.この値はpost_より小さくなければなりません.max_size値
post_max_size
8M
POSTメソッドは、ファイルをアップロードする以外に、他のフォームドメインを移動する可能性があるため、upload_より大きい情報を受信します.max_filesize
upload_tmp_dir
NULL
ファイルの一時パスをアップロードするには、このサーバを所有するプロセスユーザーに対して書き込み可能である必要があります.デフォルトはオペレーティングシステムの一時フォルダです.Linuxは/tmpディレクトリの下にあります.
グローバル配列$myfileがフォームのnameの値であるFILES:
はいれつ
説明
$_FILES['myfile']['name']
アップロードファイルの元のファイル名(接尾辞を含む)
$_FILES['myfile']['tmp_name']
uploadに保存tmp_dirの一時ファイル名
$_FILES['myfile']['size']
アップロードされたファイルのサイズ(バイト単位)
$_FILES['myfile']['error']
ファイルをアップロードするときに発生するよくあるエラー番号:0:エラーがないことを示し、アップロードに成功した1:アップロードしたファイルがuploadを超えたことを示すmax_fileの値2.アップロードされたファイルのサイズがフォームのMAX_を超えています.FILE_SIZEの値3:部分アップロードのみを示す.ファイルがアップロードされていないことを示します
$_FILES['myfile']['type']
アップロードファイルのMIMEタイプ
 
2つの関数:
  • 関数プロトタイプ:bool is_uploaded_file(string filename).HTTP POSTにアップロードされたファイルかどうかを判断するには、パラメータが$_に類似している必要があります.FILES['myfile'['tmp_name'],$FILES['myfile'][name']は、潜在的な攻撃者がスクリプトで対話できないファイルを不正に管理することを防止するためにtrueを返します.
  • 関数プロトタイプ:bool move_uploaded_file(string filename,string destination).HTTP POSTでアップロードした一時ファイルを新しいパスに移動します.TRUE
  • に正常に戻る
    ファイルのアップロードプロセス:
  • 通过$FILES['myfile'][error']エラーが発生したかどうかを判断し、エラーがあればスクリプトを終了するようにプロンプトします.
  • ドルをFILES['myfile'][name']を配列に分割し、ファイル接尾辞名を取得するか、$FILES['myfile']['type']は、許可されているアップロードタイプかどうかを判断し、アップロードが許可されているタイプでなければ、スクリプトをプロンプトして終了します.
  • 通过$FILES['myfile']['size']PHP制限の大きさを超えているか否かを判定します.
  • is_を通過uploaded_file()関数とmove_uploaded_file()ファイルを対応するディレクトリにアップロードします.

  • ファイルにPHPコードをアップロードする:

     1 <?php
    
     2 $save_path = "./uploads";                               //      
    
     3 $max_size = 1000000;                                    //       
    
     4 $allow_type = array('gif','png','jpg','jpeg');          //       
    
     5 
    
     6 //           ,            
    
     7 if(!is_dir($save_path))
    
     8         mkdir($save_path);
    
     9 
    
    10 //          
    
    11 if($_FILES['myfile']['error']){
    
    12         echo "      <br>";
    
    13         switch($_FILES['myfile']['error']){
    
    14                 case 1: die('             <br>');break;
    
    15                 case 2: die('               <br>');break;
    
    16                 case 3: die('         <br>');break;
    
    17                 case 4: die('        <br>');break;
    
    18                 default: die('    <br>');break;
    
    19         }   
    
    20 }
    
    21 
    
    22 //                  
    
    23 $hz = array_pop(explode('.',$_FILES['myfile']['name']));
    
    24 if(!in_array($hz,$allow_type)){
    
    25         die("        <br>");
    
    26 }
    
    27 
    
    28 //             
    
    29 if($max_size < $_FILES['myfile']['size']){
    
    30         die("    PHP      <br>");
    
    31 }
    
    32 
    
    33 //
    
    34 $save_file_name = date('YmdHis').rand(100,900).'.'.$hz;
    
    35 
    
    36 //     HTTP POST   ,                   ,        ;
    
    37 if(is_uploaded_file($_FILES['myfile']['tmp_name'])){
    
    38         if(move_uploaded_file($_FILES['myfile']['tmp_name'],$save_path.'/'.$save_file_name)){
    
    39                 echo "    !<br>  {$_FILES['myfile']['name']}   {$save_path}/{$save_file_name}!<br>";
    
    40         }
    
    41         else{
    
    42                 echo "      !<br>";
    
    43         }
    
    44 }
    
    45 else{
    
    46         die("  {$_FILES['myfile']['name']}    HTTP POST       ");
    
    47 }
    
    48   

    View Code
    ファイルアップロードのhtmlフォーム:

     1 <html>
    
     2 <head>  
    
     3         <title>uploadfile</title>
    
     4         <meta http-equiv="content-type" content="utf-8">
    
     5 </head>
    
     6 <body>
    
     7         <form method="POST" action="uploadfile.php" enctype="multipart/form-data">
    
     8                 <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    
     9<input type="file" name="myfile" ><br><br>
    
    10                 <input type="submit" name="sub" value="upload">
    
    11         </form>
    
    12 </body>
    
    13 </html>

    View Code
    フォームにenctype=「multipart/form-data」を付けると、アップロードされたフォームがファイルを渡すことを示します.
    改善すべき点:
  • これらのコードは単一のファイルアップロードしか処理できません.いくつかの改善を行い、複数のファイルアップロード
  • を処理することができます.
  • は、関数またはクラスとしてカプセル化され、コードの多重性を向上させることができる.

  • -----------------------------------------------------------------------------------------------
  • 本文は実験に適しており、現実的な応用に適していない.もし不良な結果をもたらしたら、本人は一切責任を負わない.
  • 本文はオリジナルブログで、個人プラットフォームで自由に転載することができますが、出典を明記し、リンクを添付する必要があります.そうしないと、盗用と見なされます.商業用途に使用することを厳禁し、必要があれば、本人の授権に連絡してから
  • を使用することができる.
  • 間違いがあれば、斧正を歓迎します.交流したいなら、メッセージを送って本人に連絡してください.