最近、私は PHP ファイル処理に非常に興味を持っているので、多くの Web サイトでファイル処理に関する多くの記事を読みました。しかし、多くの国内 Web サイトにある PHP ファイル処理に関する知識のほとんどは、私のものとあなたのものからコピーされたものです。 baidu.com や google.com で検索して見つかったものは重複しています。最近、海外のウェブサイトに記事を掲載しましたが、とても良い感じだったので、皆さんにも読んでいただくことをお勧めします。
まず、ファイルアップロードの操作プロセスと使用する知識ポイントを説明する必要があります:
ファイルをアップロードするには、HTML のフォームの type="file" タイプとその enctype 属性を使用する必要があります。これは私たち全員が使わなければならないものです。もちろん、PHP 関数ライブラリのうち、FILE 関数ライブラリ、文字列型関数ライブラリ、ディレクトリ関数ライブラリ、$_FILES[] を使用する必要があります。
おそらく、どのサイトでもファイルのアップロードに関して多くの制限がある場合があります。これらの制限には、ファイルの種類、ファイルのサイズ、拡張子、アップロード ディレクトリの存在、ディレクトリの書き込み可能性、可読性、名前の変更などが含まれます。アップロードされたファイルの説明と、ファイルをキャッシュから必要なディレクトリにコピーする方法について説明します。
もちろん、エラーの前処理を無視することはできません。さらに詳しく説明すると、ファイル操作のイベント ログの記録を有効にすることもできます。
以下では、プログラムを通じてこれらの関数を実装します。
------------------------------------- ----------- -------------------------------------- ----------- ------
1 つ目は、ファイル サイズ、ファイル拡張子の種類、MIMI タイプ、スイッチ変数を削除するかどうかを含むプリセット変数値です
$ MAX_SIZE = 2000000;
$FILE_MIMES = array(image/jpeg,image/jpg,image/gif , ,image/png,application/msword);
$FILE_EXTS = array(.zip,.jpg,.png,.gif );
$DELETABLE = true;
次のステップは、ブラウザアクセス変数とディレクトリアクセス変数を設定することです:
$site_name = $_SERVER[HTTP_HOST];
$url_d ir = "http://".$_SERVER [HTTP_HOST].dirname($_SERVER[PHP_SELF ]);
$url_this = "http://".$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF];
$upload_dir = "files/";
$upload_url = $url_dir."/files/";
$message ="";
アップロード ディレクトリを作成し、それに応じて権限を変更します:
if (!is_dir("files")) {
if (!mkdir($upload_dir) )
die (「upload_files ディレクトリが存在しないため、作成に失敗しました」);
if (!chmod($upload_dir,0755))
die (「アクセス許可を 755 に変更できませんでした。」);
}
ユーザー要求の処理:
if ($_REQUEST[del] && $DELETABLE) {
$resource = fopen("log.txt","a");
fwrite($resource,date("Ymd h:i:s")."削除 - $_SERVER[REMOTE_ADDR]"."
");
fclose($resource);
if (strpos($_REQUEST[del],"/.")>0); /") === false) //ハッキングの可能性
else if (substr ($_REQUEST[del],0,6)=="files/") {
unlink($_REQUEST[del]);
print " <script>window.location.href=$url_this?message=正常に削除されました< /script>";<br> }<br>}<br>else if ($_FILES[userfile]) {<br> $resource = fopen("log.txt", "a");<br> fwrite($resource,date("Ymd h:i) :s")."UPLOAD - $_SERVER[REMOTE_ADDR]"<br> .$_FILES[userfile][name]." "<br> .$_FILES[userfile][type]."
");<br> fclose($resource);<br><br>$file_type = $_FILES[userfile][type]; <br> $file_name = $_FILES[userfile][name];<br> $file_ext = strto lower(substr($file_name,strrpos( $file_name,".")));<br><br> //ファイル サイズ チェック: <br><br><br> if ( $_FILES[userfile][size] > $MAX_SIZE) <br> $message = "ファイル サイズが 2MB を超えています。" ; <br> //ファイル タイプ/拡張子チェック<br> else if (!in_array($file_type, $file_type, $file_type, $file_type)アップロードされます。";<br> else<br> $message = do_upload($upload_dir, $upload_url);<br> <br> print "<script> ;window.location.href=$url_this?message=$message</script>";
}
else if (!$_FILES[userfile]);
else
$message = "無効なファイルが指定されました。";
Listアップロードしたファイル:
$handle=opendir($upload_dir);
$filelist = " ";
while ($file = readdir($handle)) {
if(!is_dir($file) && !is_link($) file)) {
$filelist .= "" .$file."";
if ($DELETABLE)
$filelist .= " x";
$filelist .= " :i", filemtime($upload_dir.$file))
." ";
$filelist .="
";
}
}
function do_upload($upload_dir, $upload_url) {
$temp_name = $_FILES[userfile][tmp_name];
$file_name = $_FILES[userfile][name];
$file_name = str_replace("","",$file_name);
$file_name = str_replace("","",$file_name);
$file_path = $upload_dir.$file_name;
//ファイル名チェック
if ( $file_name =="") {
$message = "指定されたファイル名が無効です";
return $message;
}
$result = move_uploaded_file($temp_name, $file_path);
if (!chmod($file_path) ,0777))
$message = "権限を 777 に変更できませんでした。";
else
$message = ($result)?"$file_name は正常にアップロードされました。" :
「ファイルのアップロードに問題があります。」;
return $message;
}
?>