ファイルをアップロードするには、HTML のフォームの type=file タイプとその enctype 属性を使用する必要があります。これは私たち全員が使わなければならないものです。もちろん、PHP 関数ライブラリのうち、FILE 関数ライブラリ、文字列型関数ライブラリ、ディレクトリ関数ライブラリ、$_FILES[] を使用する必要があります。
おそらくどのサイトでも、ファイルのアップロードに関して多くの制限がある可能性があります。これらの制限には、ファイルの種類、ファイル サイズ、拡張子、アップロード ディレクトリの存在、アップロード ファイルの存在、ディレクトリの書き込み可能性、アップロードされたファイルの可読性、名前の変更などが含まれます。ファイルと、キャッシュから必要なディレクトリにファイルをコピーする方法について説明します。
もちろん、エラーの前処理を無視することはできません。さらに詳しく説明すると、ファイル操作のイベント ログ記録を有効にすることもできます。
以下では、プログラムを通じてこれらの関数を実装します:
1 つ目は、ファイル サイズ、ファイル拡張子の種類、MIMI タイプ、スイッチ変数を削除するかどうかを含むプリセット変数値です
$MAX_SIZE = 2000000; $FILE_MIMES = 配列(画像/jpeg,画像/jpg,画像/gif 、画像/png、アプリケーション/msword); $FILE_EXTS = 配列(.zip,.jpg,.png,.gif); $削除可能 = true |
$url_dir = http://.$_SERVER[HTTP_HOST].dirname($_SERVER[PHP_SELF]); $url_this = http://.$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF]; $upload_dir = ファイル/; $upload_url = $url_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).DELETE - $_SERVER[REMOTE_ADDR].$_REQUEST[del]n); fclose($resource); if (strpos($_REQUEST[del],/.)>0); //ハッキングの可能性 else if (strpos($_REQUEST[del],files/) === false); //ハッキングの可能性 else if (substr($_REQUEST[del],0,6)==files/) { unlink($_REQUEST[del]); print <スクリプト>window.location.href=$url_this?message=正常に削除されました</script>; } } else if ($_FILES[ユーザーファイル]) { $resource = fopen(log.txt,a); fwrite($resource,date(Ymd h:i:s).UPLOAD - $_SERVER[REMOTE_ADDR] .$_FILES[ユーザーファイル][名前]。 .$_FILES[ユーザーファイル][タイプ].n); fclose($resource); $file_type = $_FILES[ユーザーファイル][タイプ]; $file_name = $_FILES[ユーザーファイル][名前]; $file_ext = strto lower(substr($file_name,strrpos($file_name,.))); //文件大小の检查: if ( $_FILES[ユーザーファイル][サイズ] > $MAX_SIZE) $message = ファイル サイズが 2MB を超えています。; //ファイルタイプ/拡張子チェック else if (!in_array($file_type, $FILE_MIMES) && !in_array($file_ext, $FILE_EXTS) ) $message = 申し訳ありませんが、$file_name($file_type) はアップロードできません。; それ以外 $message = do_upload($upload_dir, $upload_url); print <スクリプト>window.location.href=$url_this?message=$message</script>; } else if (!$_FILES[ユーザーファイル]); それ以外は $message = 無効なファイルが指定されました。; 列出我们上传的文章: $handle=opendir($upload_dir); $filelist = ; while ($file = readdir($handle)) { if(!is_dir($file) && !is_link($file)) { $filelist .= <a href=$upload_dir$file>.$file.</a>; if ($削除可能) $filelist .= <a href=?del=$upload_dir$file title=delete>x</a>; $filelist .= <sub><small><small><font color=grey> .date(d-m H:i, filemtime($upload_dir.$file)) .</font></small></small></sub>; $filelist .=<br>; } } function do_upload($upload_dir, $upload_url) { $temp_name = $_FILES[ユーザーファイル][tmp_name]; $file_name = $_FILES[ユーザーファイル][名前]; $file_name = str_replace(\,,$file_name); $file_name = str_replace(,,$file_name); $file_path = $upload_dir.$file_name; //ファイル名チェック if ( $file_name ==) { $message = 無効なファイル名が指定されました; $メッセージを返します; } $result = move_uploaded_file($temp_name, $file_path); if (!chmod($file_path,0777)) $message = 権限を 777 に変更できませんでした。; それ以外 $message = ($result)?$file_name は正常にアップロードされました。 : ファイルのアップロードで問題が発生しました。; $メッセージを返します; } ?> <中央> <font color=red><?=$_REQUEST[メッセージ]?></font> <フォーム名=アップロードID=アップロードENCTYPE=multipart/form-dataメソッド=post> ファイルをアップロードする<入力タイプ=ファイルID=ユーザーファイル名=ユーザーファイル> <入力タイプ=送信名=アップロード値=アップロード> </フォーム> 私のファイル <時間幅=70%> <?=$filelist?> <時間幅=70%> <small><sup>開発者: <a style=text-decoration:none href=http://tech.citypost.ca>CityPost.ca</a> </sup></small> </center> |