ホームページ > バックエンド開発 > PHPチュートリアル > PHP_PHP チュートリアルを使用したファイルアップロードの具体的なアイデアと実装

PHP_PHP チュートリアルを使用したファイルアップロードの具体的なアイデアと実装

WBOY
リリース: 2016-07-13 17:34:38
オリジナル
869 人が閲覧しました

ファイルをアップロードするには、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
次のステップは、ブラウザー アクセス変数とディレクトリ アクセス変数を設定することです:


$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 = ファイル/;
$upload_url = $url_dir./files/;
$メッセージ =;
アップロード ディレクトリを作成し、それに応じて権限を変更します。


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 <スクリプト>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>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508470.html技術記事ファイルをアップロードするには、HTML のフォームの type=file タイプとその enctype 属性を使用する必要があります。これは私たち全員が使わなければならないものです。もちろん、PHP 関数ライブラリの FILE 関数ライブラリと文字列クラスも...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート