ホームページ >バックエンド開発 >PHPチュートリアル >phpの基礎知識(5) - ファイルダウンロード
phpの基礎知識(5)-ファイルアップロード
PHP の基本 - ファイルのアップロード
サンプル コード ダウンロード ページ http://xieye.iteye.com/blog/1336095
では、ユーザーがテキスト ファイルとバイナリ ファイルをアップロードできます。 PHP の認証機能とファイル操作機能を使用すると、誰にアップロードを許可するか、アップロード後にファイルをどうするかを完全に制御できます。
関連設定: php.ini の file_uploads、upload_max_filesize、upload_tmp_dirpost_max_size、max_input_time 設定オプションを参照してください。
デフォルトでは、php 設定でアップロードが許可されており、ファイル サイズは 2M を超えることはできません。
PHP アップロードでは特別なフォームを構築する必要があります。実際、フォームには追加の属性 enctype="multipart/form-data" があり、form 要素に追加の file 要素があります。
サーバー側で move_uploaded_file 関数を使用する必要があり、$_FILE スーパー グローバル変数が使用可能です。
以下は PHP マニュアルからのコピーです
<<<
$_FILES['userfile']['name']
クライアント マシン ファイルの元の名前。
$_FILES['userfile']['type']
ファイルの MIME タイプ (ブラウザーがこの情報を提供する場合)。例は「画像/gif」です。ただし、この MIME タイプは PHP 側ではチェックされないため、鵜呑みにしないでください。
$_FILES['userfile']['size']
アップロードされたファイルのサイズ (バイト単位)。
$_FILES['userfile']['tmp_name']
ファイルのアップロード後にサーバーに保存される一時ファイル名。
$_FILES['userfile']['error']
ファイルのアップロードに関連するエラー コード。このプロジェクトは PHP バージョン 4.2.0 で追加されました。
>>>
提案 1: 実際のアプリケーションでは、ユーザーがアップロードしたファイルをプログラムと同じディレクトリに配置すべきではありません (これは悪い習慣です)。このチュートリアルでは、シンプルにするためです。
提案 2: システムのセキュリティのため、元のファイル名を保存する必要がある場合は、アップロードしたファイルの名前を常に変更してデータベースに保存する必要があります。
提案 3: ユーザーが頻繁にファイルをアップロードする場合は、特定のディレクトリの下にサブディレクトリを作成する必要があります。たとえば、uploadfile ディレクトリには、日ごとに 20120102、20120103 などのディレクトリがあります。
ユーザーがアップロードしたファイルは、それぞれのディレクトリに保存されます。ディレクトリ内のそれぞれのディレクトリ。
提案 4: ファイル数が少ない場合を除き、アップロードされたファイルを内容に応じて独自のフォルダーに保存することはお勧めできません。同じディレクトリ内にファイルが多すぎると (たとえば、10,000 を超える)、Linux または Windows に関係なく、システムの取得速度が低下するためです
。
提案 5: サブディレクトリを作成する場合、通常はパスをデータベースに保存する必要があります。
例 1:
http://localhost/command/peixun/upload/1.php
通常のファイルアップロードコード。アップロード後、フォルダーに移動できます。実際にアップロードされているかどうかを確認します。
例 2
参考ソース; http://www.phpletter.com/Our-Projects/AjaxFileUpload/
jquery ライブラリと jquery プラグインの使用 ajaxfileupload
テストURL
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'] . '上传成功,请到当前文件夹下去检查'; }
<?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 '{}'; }