PHPアップロードファイル(単一)

29884 ワード

PHPアップロードファイルの関数クラスライブラリについては、ネット上に多くのパッケージが完備されているので、直接持ってきて使えばいいです.
この文章はただアップロードの原理と簡単なアップロードの操作について話して、老鳥は無視しました
また、サービス側はピクチャタイプのファイルを受信できることを制限し、クライアントはウイルスファイルの接尾辞名をピクチャプロファイルのファイルアップロードに悪意を持って変更するなどのセキュリティ判断もあります.
 
(例えば、単一ファイルのアップロードでは、マルチファイルの原理は変わらないが、ちょっとしたテクニックが多いだけだ)
 
index.html
<!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" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>upload files</title>
</head>
<body>

    <form action="upload.php" enctype="multipart/form-data" method="post">
        <input type="hidden" name="MAX_FILE_SIZE" value="10000" /><input type="file" name="file"/>
        <input type="submit" value="  " />
    </form>
</body>
</html>

1.Formタグenctype属性
フォーム内のenctype=「multipart/form-data」は、フォームを設定するためのMIME符号化です.デフォルトでは、この符号化フォーマットはアプリケーション/x-www-form-urlencodedであり、ファイルアップロードには使用できません.ファイルデータを完全に転送するにはmultipart/form-dataを使用し、Postでコミットします.
 
2、MAX_FILE_SIZE隠しフィールド
MAX_FILE_SIZE非表示フィールド(バイト単位)は、ファイル入力フィールドの前に置かなければならず、その値は受信ファイルの最大サイズである.これはブラウザに対するアドバイスで、PHPもこれをチェックします.ブラウザ側ではこの設定を簡単に迂回できるので、このプロパティで大きなファイルをブロックすることは期待できません.(ただし、ユーザーが大きなファイルのアップロードを待つのを待ってから、ファイルが大きすぎてアップロードに失敗したことに気づくのを避けることができるため、友好的にフォームにこの項目を追加したほうがいいです.)
 
upload.php
<?php    
    print_r($_FILES);
?>

次のように見えます.
Array
(
    [file] => Array
        (
            [name] =>     .jpg
            [type] => image/jpeg
            [tmp_name] => F:\wamp\tmp\php41BB.tmp
            [error] => 0
            [size] => 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でON
upload_tmp_dir ;ファイルはサーバに一時ファイルが格納されている場所にアップロードされ、指定されていない場合はシステムのデフォルトの一時フォルダが使用されます.
upload_max_filesize;つまり、アップロードできるファイルサイズの最大値です.デフォルトは2 M
post_max_size;フォームPOSTを介してPHPに受信できる最大値を指し、フォーム内のすべての値を含む.デフォルトは8 M
 
以下は単一ファイルにアップロードされた完全なコードです.随想随写なので、論理ネストが少し乱れている可能性があります.原理を理解することが最も重要です.
<?php
    
    //        
    $fileName=$_FILES['file']['name'];
    $fileType=$_FILES['file']['type'];
    $fileError=$_FILES['file']['error'];
    $fileSize=$_FILES['file']['size'];
    $tempName=$_FILES['file']['tmp_name'];//     
    
    //        
    $typeList = array("image/jpeg","image/jpg","image/png","image/gif"); //       

    if($fileError>0){
            //          
            switch ($fileError) {
                case 1:
                    $message="        php.ini   upload_max_filesize       。"; 
                    break;
                case 2:
                    $message="           HTML     MAX_FILE_SIZE       。"; 
                    break;
                case 3:
                    $message="         。"; 
                    break;
                case 4:
                    $message="       。";
                    break;
                case 6:
                    $message="        。"; 
                    break;
                case 7:
                    $message="      "; 
                    break;
                case 8:
                    $message="  PHP            ";
                    break;
            }

            exit("      :".$message);

        }
    if(!is_uploaded_file($tempName)){
        //     POST       
        exit("    HTTP POST       ");
    }else{
        if(!in_array($fileType, $typeList)){
            exit("           ");
        }else{
            if(!getimagesize($tempName)){
                //          ,               
                exit("         ");
            }
        }
            if($fileSize>100000){
                //              
                exit("          ");
            }else{
                //            
                $fileName=iconv("UTF-8", "GBK", $fileName);// iconv         utf-8  gbk  
                $fileName=str_replace(".", time().".", $fileName);//
                if(move_uploaded_file($tempName, "uploads/".$fileName)){
                    echo "      !";
                }else{
                    echo "      ";
                }
            }

        }

?>

 
5、phpアップロードファイルのいくつかの常用関数について:(具体的な使い方は貼らないで、自分でAPIドキュメントを見ましょう^^)
file_existsファイルまたはディレクトリが存在するかどうかを確認
is_uploaded_fileファイルがHTTP POSTでアップロードされたかどうかを判断する
move_uploaded_fileアップロードしたファイルを新しい場所に移動
is_writable指定されたファイル名が書けるかどうかを判断
iconv文字符号化相互回転
str_replace文字列置換(ファイル名、重複防止名を変更)
getimagesizeはピクチャファイルかどうかをチェックします(他のタイプのファイルは接尾辞名が変更されても検出できます)