Web.fla

主食は、html/css/php/javascript(jQuery) デザートはactionscript!WEBに関することをメモってくサイト

*

【PHP】画像ファイルのアップロードから削除までの流れ パート2

   

ここまでPHPでファイルのアップロードやフォルダ内のファイル一覧表示などを記事を書いてきましたが、その処理を利用して画像ファイルのアップロードと削除の方法を記事にしようかと思います。

PHPでは画像をアップロードとか削除は割と頻繁にある処理だと思います。

画像ファイルのアップロードと削除のプログラムの全体像

今回、記事にするにあたってサンプルを作成しました。

メインとなるPHPで画像をアップロードと削除するプログラムを載せます。ただしファイルが選択されていない場合、チェックボックスにチェックが入っていない場合の「選択されていません」というような文言やリロード対策などの処理などは省いています。

PHPで画像ファイルのアップロードの処理

画像をアップロードする流れ

全体の流れは割りと基本的な事ですが、下記のような流れにしてみたいと思います。

  1. 画像ファイル名が日本語かどうか調べ、日本語の場合はエラー表示する
  2. 画像ファイルの拡張子を調べjpg/gif/pngのみアップロードできるようにチェックする
  3. 画像ファイルを保存するディレクトリーを調べて同じファイル名の画像がないかチェックする
  4. 上記で問題なければ指定した画像フォルダにアップロードをしてアップロードした画像を一覧表示します。

ディレクトリーと正規表現の変数

まずは、この画像アップロードと削除では画像を保存するディレクトリーを指定する必要があるのと、日本語かどうかチェックするための正規表現も必要になるので最初に宣言しておきます。

正規表現については説明すると長くなるので簡単に説明すると、アップロードの画像の名前が英数字と-(ハイフン)_(アンダーバー)かどうか.(ドット)以下の拡張子はアルファベットの大文字小文字が3文字かどうかチェックしています。jpg/gif/png の文字数が3文字だからです。

$_FILESでファイルを取得する

ファイルは「multipart/form-data」形式でエンコードされたPOSTメソッドにより、アップロードされます。アップロードされたファイルは$_POSTではなくスーパーグローバール変数の$_FILESへ格納されます。
ファイルの情報は$_FILESの連想配列に格納されてるのでそこから情報を取得する事ができる。

エラーチェックを行う処理

アップロードしたらそれが画像ファイルかどうかなどチェックしていきます。方法としてはもしエラーがあった場合は変数$erを連想配列としてエラーの文言を入れていきます。これは画像をアップロードする際にエラーがないかどうかの判断材料になります。

ファイル名に日本語が含まれているかチェックする

画像ファイルに日本語が含めれているかチェックするためにpreg_match()で英数字と-(ハイフン)_(アンダーバー)以外が文字列に含まれていた場合は、変数$erに連想配列でエラーの文言を格納します。

アップロードされたファイルが画像ファイルかどうかチェックする

画像ファイルかどうかを調べるには、アップされたファイルの拡張子を調べれば分かるので、substr()でファイル名の後ろから3文字を切り出してその文字列をif()でチェックします。

同じ画像ファイルがアップされているか調べる

アップした画像ファイルがサーバーに存在していた場合はアップをしないようにしたいので、まずscandir()でディレクトリー内のファイルをすべて配列で取得します。

その後は、foreach()でファイル毎にループ処理をしますが、scandir()はディレクトリーも取得してしまいます。今回は画像ファイルしかアップしませんが、is_dir()で「ディレクトリー以外のファイルの場合」という条件分岐をしておきます。それによってファイルのみをチェックします。
後は、アップロードされた画像ファイル名とディレクトリーから取得したファイル名が一致すればすでに同じファイル名が存在しているという判断になります。

エラーがなければ画像ファイルをアップロードする

上記のエラーの処理をしてエラーがあった場合は変数$erに各エラーの文言を格納していますので、ですの$erが空であればエラーがないと判断できるので、move_uploaded_file()で指定したディレクトリに画像ファイルをアップロードします。

注意点として、アップロードされたファイルはテンポラリファイルとして$_FILE[パラメータ名][tmp_name]に一時的に格納されます。ですので実際にサーバーにアップするには、テンポラリファイルをmove_uploaded_file()関数に指定してディレクトリーにコピーする必要があります。
テンポラリファイルはPHPの処理の終了後に自動的に削除されます。

画像ファイルをサーバーにアップロードする内容はここまでです。

PHPでサーバーから画像ファイルを削除する処理

アップロードが完了したら今度は削除する方法を記載していきます。サーバーから画像ファイルを削除する流れは下記のようにします。

  1. チェックを入れた画像の名前を$_POSTで受けとる。複数の場合もあるので配列で処理するのでフォームのname属性は配列を指定しておく
  2. file_exists()でファイルがサーバーに存在するかif()で判定する
  3. unlink()で画像をサーバーから削除する

サーバーから削除したい画像ファイルの名前を取得する

フォームの削除したい画像ファイルのチェックボックスにチェックを入れた画像の名前を$_POSTで受け取ります。この時複数にチェックが入っていれば配列で受け取ることになります。

画像ファイルがサーバーにあるか確認してから削除する

画像ファイルを削除するにあたって複数の場合もあるのでforeach()でファイルごとにfile_exsists()でファイルが存在するか調べます。存在するようであればunlink()で画像を削除します。

file_exists()もunlink()も指定するのは、ファイル名だけでなくファイルまでのパスも指定しましょう。

画像ファイルをサーバーから削除する内容はここまでです。

html側のコード

今度はhtml側のフォームの説明やアップした画像ファイルの一覧表示などについて説明します。

画像をアップするためのフォームの設定

画像をアップするためにはもちろんフォームを使います。

ファイルをアップする場合はenctypeを設定してmultipart/form-dataを指定する必要があります。inputのtypeはfileを指定する事でファイルを選択する事ができます。
またアップロードの処理と判別する為に、hiddenタグで「valueに=”upload”」を指定しておきます。

PHPでエラーの文言を表示させる

アップロード時に日本語、画像ファイル以外、重複チェックのさいにエラーの文言を変数に格納しましたがそれをPHPでhtml上に表示させます。

変数に空でないかチェックした後はforeach()でループさせてエラーの文言をechoで表示させています。

画像を一覧表示させフォームを設定する

一覧表示させるプログラムは「 同じ画像ファイルがアップされているか調べる 」処理と同じでscandir()でディレクトリ内のファイルを取得してis_dir()で画像ファイルのみをforeach()のループ処理でimgタグにファイル名を指定すれば大丈夫です。

また、画像を削除する時に画像ファイル名が必要なのでチェックボックのvalue値に画像ファイル名をPHPのechoで設定しておきます。また複数の画像を削除対象にすることもあるのでチェックボックスのname属性にdeletefile[]と配列しておきます。*名前は任意です。

あとは、アップロードと削除の処理を区別するために、hiddenタグでvalue値に「delete」という文字を設定しています。

まとめ

ざっと駆け足でPHPで画像のアップロードと削除を説明しました。画像をアップしたり削除したりするのはいろんなWEBサイトでも使われてるので覚えておいてもよいかと思います。

 - WEBやIT関連のNews

     

Message

  関連記事

no image
気になった「人の行動心理」の記事

心理学って面白いですよね~。それが行動に現れたりするのを↓の記事を見ると自分もそ …

no image
無料オンラインストレージ。いつでもアクセスできて便利!NEVERまとめの紹介

ここ最近はやりのオンラインストレージ。自分は基本的いはskydriveとNドライ …

no image
Googleが検索エンジンのアップデートをリリース!!そのまとめ

googleは最近、なにかと話題になってますね~!google driveもそう …

パソコンでKindleの電子書籍が読める「Kindle for PC」配信!!

あのアマゾンがやってくれました。(いい意味で)もう、待ちくたびれましたよ・・・し …

wordpressでサイトを作るときの知っておくべきブログ

今やcmsでwordpressが利用されるのも当たり前になってますよね~ってこと …

no image
これは便利!!プレゼンの使用で使える素材!!

資料を作る時は言葉だけでは伝わりづらい時に、分かりやすく図解を入れることもありま …

no image
ついに新型のMac Book ProとiOS6が発売!!

いや~ついに発売されました。いつも発売前に買っていて、苦い思い出しかないですが、 …

no image
iphone5についてのまとめ

ついにiphone5が出るというのが近づいてきました。結局どうなん?ってことでN …

場所や時間を問わない副業もOKな新しい働き方を提案するIT求人サイトとは!?

WEB業界って、まぁ昔から「きつい」「厳しい」「帰れない」の三つの「K」になぞら …

no image
クリエイティブなパパのまとめの紹介

こういうパパ素敵やな~!ということでNeverですてきな記事を発見した。二人の娘 …