php基礎知識(5)-ファイルアップロード

5718 ワード

php基礎知識-ファイルアップロード
サンプルコードダウンロードページ
http://xieye.iteye.com/blog/1336095
ユーザーにテキストとバイナリファイルをアップロードさせることができます。PHPの認証とファイル操作関数を使って、どの人のアップロードとファイルアップロードを許可するかを完全に制御できます。
関連の設定:php.iniのを参照してください。
file_uplads、
upload_max_filesize
post_max_size=8 M、
upload_tmp_dirpost_max_size
及びmax_input_時間
オプションを設定
デフォルトでは、phpの設定はアップロードできます。ファイルサイズは2 Mを超えてはいけません。
phpアップロードには特殊なフォームを構築する必要があります。つまりフォームには一つの属性enctype=「multiipad/form-data」が追加されています。また、フォーム要素には一つのfile要素が追加されています。
サービスにはmove_を使う必要があります。uplloaded_file関数は、$uがあります。FILEハイパーグローバル変数が使用できます。
以下はphpハンド・バックから写します。
<<
$uFILES['userfile']['name']
クライアントマシンファイルの元の名前。
$uFILES['userfile'][type]]
ファイルのMIMEタイプは、ブラウザがこの情報を提供すると。一例は「イメージ/gif」です。このMIMEタイプはPHP側では検査していませんので、当然この値があるとは思わないでください。
$uFILES['userfile']['size']
アップロード済みファイルのサイズは、単位がバイトです。
$uFILES['userfile']['tmp_name']
ファイルがアップロードされた後、サービスに保存された一時ファイル名。
$uFILES['userfile']['error']
このファイルに関連するエラーコードをアップロードします。このプロジェクトはPHP 4.2.0バージョンで増加しました。
>>
提案1:実際のアプリケーションでユーザーがアップロードしたファイルはプログラムと同じディレクトリに置くべきではない(それは悪い習慣です)。
アドバイス2:システムの安全のために、常にアップロードファイルに名前を変更する必要があります。元のファイル名を保存すると、データベースに保存できます。
提案3:もしユーザーがよくファイルをアップロードするなら、あるディレクトリの下にサブディレクトリを作るべきです。例えば、uploadfileディレクトリの下に20102、2010.03などの日付別のディレクトリがあります。
       ユーザがアップロードしたファイルは毎日別のディレクトリに保存されます。
提案4:アップロードファイルを内容別にそれぞれのフォルダに保存することを勧めません。ファイルが少ない限り。同じディレクトリの下にファイルが多すぎると、システムの検索速度が遅くなります。
        ,linuxでもwindowsでも。
サブディレクトリを作ったら、パスもデータベースに保存する必要があります。
  
例1:
http://localhost/command/peixun/upload/1.php
普通のアップロードファイルのコードは、アップロードした後、フォルダに確認してください。本当にアップロードされましたか?
例2
ソースを参照する;http://www.phpletter.com/Our-Projects/AjaxFileUpload/
jqueryライブラリとjqueryプラグインajaxfileupladを使用しました。
テストコース
http://localhost/command/peixun/upload/2.php
jsでファイルをアップロードします。クライアントコードは変わりましたが、サーバーコードは全く変わりません。
コードはダウンロードできます
1.php

<?php
//     
require_once('../Public/CommandLine.php');

$isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0;
if ($isget) {
    $html = <<<longs
<html>    
<body>
  <form method="post"  enctype="multipart/form-data" >
         :<input type="file" name="file1" >
    <br />
    <input type="submit" value="  " />
  </form>
</body>  
</html>  
longs;
    echo $html;
    
} else {
    $file = $_FILES['file1'];
    $oldname = $file['tmp_name'];
    $result = move_uploaded_file($oldname, $file['name']);//        
    echo $file['name'] . '    ,           ';
    
}
2.php

<?php
//     
require_once('../Public/CommandLine.php');

$isget = ($_SERVER['REQUEST_METHOD'] == 'GET') ? 1 : 0;
if ($isget) {
    $html = <<<longs
<html>    
<link href="ajaxfileupload.css" type="text/css" rel="stylesheet">
    <script type="text/javascript" src="jquery-1.6.2.min.js"></script>
    <script type="text/javascript" src="ajaxfileupload.js"></script>
    <script type="text/javascript">
    function ajaxFileUpload()
    {
        $("#loading")
        .ajaxStart(function(){
            $(this).show();
        })
        .ajaxComplete(function(){
            $(this).hide();
        });

        $.ajaxFileUpload
        (
            {
                url:'2.php',
                secureuri:false,
                fileElementId:'fileToUpload',
                dataType: 'json',
                success: function (data, status)
                {
                    alert('    ')
                },
                error: function (data, status, e)
                {
                    alert(e);
                }
            }
        )
        
        return false;

    }
    </script>   
    </head>

    <body>

  <div id="content">
    <h1>Ajax      </h1>
        
    <img id="loading" src="loading.gif" style="display:none;">
    <form name="form" action="" method="POST" enctype="multipart/form-data">
      <input id="fileToUpload" type="file" size="45" 
             name="fileToUpload" class="input">
      <br />
      <button class="button" id="buttonUpload" 
                         onclick="return ajaxFileUpload();">Upload</button>
    </form>     
  </div>
    

    </body>
</html>  
longs;
    echo $html;
    
} else {
    //  :       。
    $file = $_FILES['fileToUpload'];
    $oldname = $file['tmp_name'];
    $result = move_uploaded_file($oldname, $file['name']);//        
    echo '{}';
    
}