PHPファイルアップロードの例添付詳細


アップロード部分のフォームコード:
<form method="post" action="upload.php" enctype="multipart/form-data">
<table border=0 cellspacing=0 cellpadding=0 align=center width="100%">
<tr>
<td width=55 height=20 align="center"><input type="hidden" name="MAX_FILE_SIZE" value="2000000">  : </TD>
<td height="16">
<input name="file" type="file" value="  " >
< input type="submit" value="  " name="B1">
</td>
</tr>
</table>
</form>
ここで注意すべき点はいくつかありますが、まずこの
を見てみましょう.ここではPOSTメソッドを採用しています.個別のブラウザではPUTメソッドもサポートされています.もちろん、スクリプトを修正する必要があります.私はそうはお勧めしません.フォームにenctype="multipart/form-dataを設定する必要があります.これにより、サーバはアップロードファイルに通常のフォーム情報が含まれていることを知っています.これは設定する必要があることを覚えておいてください.また、アップロードファイルの最大長を制限する隠しドメインが必要です:,ここでnameはMAX_FILE_SIZEに設定する必要があります.その値はアップロードファイルの最大長で、単位はBです.ここでは2 Mに制限します.,type="file"ファイルのタイプを説明して、このような基本的なアップロードファイルのインタフェースは完成して、次にPHPでアップロードしたファイルを処理する方法を話して、それからあなたのphp.iniで設定したアップロードファイルの最大長さは実際のアップロードに影響する可能性があります.実際の状況に応じて修正してください.PHPのアップロードはまず一時ディレクトリに転送され、指定されたディレクトリに移動します.一時ディレクトリは、必要に応じて変更するか、デフォルト値を使用します.
はい、フォームをuploadに提出します.php、このページに何があるか見てみましょう.
<?php
/*****************************************
Title :      
Author:leehui1983(   )
Finish Date :2006-12-28
*****************************************/
$uploaddir = "./files/";//             /
$type=array("jpg","gif","bmp","jpeg","png");//           
$patch="http://127.0.0.1/cr_downloadphp/upload/files/";//      

//         
function fileext($filename)
{
return substr(strrchr($filename, '.'), 1);
}
//         
function random($length)
{
$hash = 'CR-';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
$max = strlen($chars) - 1;
mt_srand((double)microtime() * 1000000);
for($i = 0; $i < $length; $i++)
{
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;
}
$a=strtolower(fileext($_FILES['file']['name']));
//      
if(!in_array(strtolower(fileext($_FILES['file']['name'])),$type))
{
$text=implode(",",$type);
echo "           : ",$text,"<br>";
}
//          
else{
$filename=explode(".",$_FILES['file']['name']);
do
{
$filename[0]=random(10); //       
$name=implode(".",$filename);
//$name1=$name.".Mcncc";
$uploadfile=$uploaddir.$name;
}
while(file_exists($uploadfile));
if (move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile)){

if(is_uploaded_file($_FILES['file']['tmp_name'])){
//      
echo "<center>                 : </center><br><center><img src='$uploadfile'></center>";
echo"<br><center><a href='javascript:history.go(-1)'>    </a></center>";
}
else{
echo "    !";
}
}
}
?>

まず私は原理を話して、このプログラムはアップロードのピクチャーを例にして、先にファイルのタイプがピクチャーのフォーマットであるかどうかを判断して、もしファイルをアップロードするならば、ランダムな数と時間の組み合わせでファイルを再命名します(アップロードのファイルの重名を避けて、このようにする必要があります!)、次にファイルを指定したディレクトリにアップロードし、アップロードに成功するとアップロードした画像プレビューを出力します.ここではプログラムのいくつかの関数について説明します.まずreturn substr(strrchr($filename,'.'),1),strrchar()関数がどのような役割を果たすかを見てみましょう.例を挙げると、画像ファイルpicのようなものがわかります.jpg、strrchrで処理し、strrchr(pic.jpg,'.')を返します.jpg、分かりましたか?この関数は、指定した文字列が最後に表示された位置の後の文字を返します.substr()に合わせてjpgを取得できます.これにより、アップロードファイルが指定したフォーマットに合致するかどうかを判断するために、ファイルの接尾辞名が得られます.このプログラムでは、指定したフォーマットを1つの配列に配置し、実際に使用する場合は必要に応じて追加できます.
次に、乱数を生成するファイル名の部分を見て、mt_を見ます.srand()という関数は、マニュアルでは「より良い乱数発生器の種をまく」と呼ばれていますが、実は乱数の関数を初期化しています.パラメータはmicrotime(*1000000です.ここではパラメータでなければ自動的に乱数を設定します.これは私たちのニーズに合わない場合、乱数は一定の長さを備えています.アップロードファイルの名前が重複しないことを保証します.次に、ファイルタイプを判断する関数を呼び出し、小文字strtolower(fileext($_FILES['file'][name'])に変換します.ここには重要な東東$FILES、これはスーパーグローバル配列で、処理するフォームデータを保存して、register_を開いたらglobalsは、直接アクセスすることもできますが、これは安全ではありません.さっきのアップロードインタフェース$_FILES['file'][name']--ファイル名を取得
$_FILES['file']['tmp_name']--一時記憶位置を取得
$_FILES['file']['size']--ファイルサイズを取得
$_FILES['file'][type']--ファイルMIMEタイプを取得
これらの情報を入手すれば、ファイルの情報を簡単に判断できるのではないでしょうか.次にいくつかの関数について説明しますfile_exists()--指定されたディレクトリが存在するかどうかを判断し、存在しない場合はもちろんアップロードできません(くだらない話のようです!)、move_uploaded_file-アップロードファイルを指定したディレクトリに移動します.is_uploaded_file-ファイルがHTTP POSTでアップロードされたかどうかを判断します.アップロードに成功したら、プレビューを出力します.そうしないと、アップロードに失敗します.
本文は自己を参考にします:phpファイルのアップロードの原理は深く分析して理解します