ファイルをアップロードするには、HTML のフォームの type=file タイプとその enctype 属性を使用する必要があります。これは私たち全員が使わなければならないものです。もちろん、PHP 関数ライブラリのうち、FILE 関数ライブラリ、文字列型関数ライブラリ、ディレクトリ関数ライブラリ、$_FILES[] を使用する必要があります。
おそらくすべてのサイトには、ファイルのアップロードに関して多くの制限がある可能性があります。これらの制限には、ファイルの種類、ファイル サイズ、拡張子、アップロード ディレクトリの存在、アップロード ファイルの存在、ディレクトリの書き込み可能性、可読性、名前の変更などが含まれます。アップロードされたファイルと、キャッシュから必要なディレクトリにファイルをコピーする方法について説明します。
もちろん、エラーの前処理を無視することはできません。さらに詳しく説明すると、ファイル操作のイベント ログ記録を有効にすることもできます。
以下では、プログラムを通じてこれらの機能を実装します。
1 つ目は、ファイル サイズ、ファイル拡張子の種類、MIMI タイプ、およびスイッチ変数
$MAX_SIZE = 2000000 を削除するかどうかを含むプリセット変数値です。
$FILE_MIMES = array('画像/jpeg','画像/jpg','画像/gif'
,'image/png','application/msword');
$FILE_EXTS = array('.zip','.jpg','.png','.gif');
次のステップは次のとおりです
。
ブラウザ アクセス変数とディレクトリ アクセス変数を設定します:
$site_name = $_SERVER['HTTP_HOST'];
$url_dir = 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).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 <script>window.location.href='$url_this?message=正常に削除されました'</script>;
}
}
else if ($_FILES['userfile']) {
$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['userfile']['size'] > $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 <script>window.location.href='$url_this?message=$message'</script>;
}
else if (!$_FILES['userfile']);
それ以外
$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 ($DELETABLE)
$filelist .= <a href='?del=$upload_dir$file' title='delete'>x</a>;
$filelist .= <sub><small><small><font color=grey> .date(dm H:i, filemtime($upload_dir.$file))
.</font></small></small></sub>;
$filelist .=<br>;
}
}
function do_upload($upload_dir, $upload_url) {
$temp_name = $_FILES['userfile']['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 = 無効なファイル名が指定されました。
$message を返します。
$
result = move_uploaded_file($temp_name, $file_path);
if (!chmod($file_path,0777))
$message = 権限を 777 に変更できませんでした。;
それ以外
$message = ($result)?$file_name は正常にアップロードされました。
ファイルのアップロードに問題があります。;
$message を返します。
}
?>
<中央
>
<font color=red><?=$_REQUEST[メッセージ]?></font>
<br>
<form name=upload id=upload ENCTYPE=multipart/form-data method=post>
ファイルのアップロード <input type=file id=userfile name=userfile>
<入力タイプ=送信名=アップロード値=アップロード>
</form>
<br><b>マイファイル</b>
<時間幅=70%>
<?=$ファイルリスト?>
<時間幅=70%>
<small><sup>開発者
<a style=text-decoration:none href=http://tech.citypost.ca>CityPost.ca</a>
</sup></small>
</中央>