基礎から解る!PHP入門講座 プログラム入門に最適な言語、PHPを学ぼう

基礎から解る!PHP入門講座

プログラム入門に最適な言語、PHPを学ぼう      

 このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。


アップロード

 画像貼付け掲示板などで、閲覧者が自由に写真をアップできる仕組みです。
 ブラウザ上でPCにあるファイルを指定して送信すると、ファイルがサーバーに送られ指定したフォルダに保存されます。

 しかし、これだけでは何も面白みがありません。さらにそのファイルをブラウザ上に表示させます。
 また、複数のアップロードを受付けて、それらの画像を順に表示させて見ましょう。
 このスクリプトあたりから少々複雑になってきますが、パターンを覚えてしまえば簡単です。

9-1 画像ファイルをアップロードしてみよう

 まずは最も単純にファイルをアップロードする仕組みを見てみましょう。formの <input type="file">を使います。type 属性をfileにすることで送信形式が作られるのです。 それをPHPで受け取るのですが、まず次のように変数に代入します。
 $filename = $_FILES['data']['name']
これを、指定フォルダの中に保存するのが、
 move_uploaded_file($_FILES['data']['tmp_name'], $updir.$filename)
その後、echo命令で画像を表示しているわけです。
 echo $_FILES['data']['error']
 これはエラーコード出してくれるものです。
0は「ファイルアップロードは成功」
1〜3が「何らかの理由でアップロードできなかった」
4は「アップロードされていません」と言う意味です。
 この記述はなくてもかまわないですね。

 指定フォルダと言うのは、自分で前もって作っておくフォルダのことです。ここでは updir という名前のフォルダを作りPHPファイルと同じ場所に置いています。
 $updir = "./updir/";
 これは変数に保存用のフォルダを代入している部分です。始めの "./" はなくても同じ結果が得られるのですが、付けている方が多いようです。
 また、自分のPC環境で使う場合は、これで保存できるのですが、FTP でレンタルサーバーなどで動かす場合は、フォルダのパーミッション(属性)を書込みができるように設定する必要があります。 ⇒こんな感じ
スクリプトは ⇒こちらへどうぞ

9-2 なんでもかんでもアップされると困るよね

 上のサンプルでは実際にアップロードできません。なんでもかんでもアップロードされたら大変です。そこで、アップできるファイルの形式やサイズを制限しないといけないわけです。そこで役に立つのが正規表現やファイルのサイズを測る関数です。サイズとファイル名の2つの条件に合ったときのみファイルをアップロードします。
 このあたりから、構造が複雑になります。画面の状態は次の4つです。
1、最初の状態→→→→→→→→→「参照で画像ファイルを指定して、表示をクリック!」
2、ファイルが大きい場合→→→→「ファイルサイズが大きすぎます。」
3、ファイルの拡張子が違う場合→「jpg かgif のファイルしかアップできません。」
4、条件にあったファイルの場合→「アップロード成功」画面に表示
 この判断のために、IFを3重の構造にしています。またここで新しくfile_existsとfilesizeが出てきます。
 file_exists( )
 ファイルが存在するかどうか、つまり最初の画面ではファイル名は空欄なので1の表示にしなければなりません。それを判断する関数です。
 filesize( )
 名前の通りファイルのサイズを測る関数です。
 ereg("(^[a-zA-Z0-9_-]+)¥.(jpg)|(^[a-zA-Z0-9_-]+)¥.(gif)",$filename)
 ファイルは、英数小文字大文字、記号はハイフンとアンダーバーのみ、拡張子はjpg/gifのみという設定にしています。実際にはハイフンとアンダーバー以外の記号も使用可能なので、アップロードできないファイルもあるはずです。 ⇒こんな感じ
スクリプトは ⇒こちらへどうぞ

9-3 アップしたのにすぐ消えちゃうぞ!

 上のサンプルでは一度は表示されますが、2度とでてきません。ファイルはサーバーのフォルダに保存されたままです。今度はこの保存されたファイルを一覧にして表示できるようにしましょう。
 アップロードの仕組みは上のスクリプトをそのまま使い、表示用にファイルを読み出して表示させる仕組みを追加します。
 opendir closedir
 フォルダを開く関数と閉じる関数です。これがスクリプトの前後に入ります。
 $handle = opendir($updir)
 $file = readdir($handle)
 これはファイルを開き読みこむ関数です。ファイルはアップされた順に読みこみます。
 if ($file != "." and $file != "..")
 readdir がまず.と..を表示してしまうのでそれをスキップする命令です。
 while (false !== ($file = readdir($handle)))
 繰返しを行う条件はファイルが存在するかどうかです。
 if($cnt > 20){ break; }
 ファイルが多くなると表示が遅くなるので、20でループを中止する命令です。

 テーブルは横5列で改行する設定で、カウントが5で割って0になれば</tr>をいれるようにIFを使っています。画像の表示は普通のHTMLで<img src="・・・"> width を使ってサイズを調整しています。 ⇒こんな感じ
スクリプトは ⇒こちらへどうぞ

9-4 サムネイルを自動で作る

 PHPは画像を作成したり修正することができます。PHPの通常の設定ではできないので、可能にするための設定をphp.iniで行います。600行あたりにあるGDの拡張機能をON、つまり;を削除します。その後アパッチを再起動してください。phpinfo で"gd"が表示されると画像処理の関数が使えるようになります。
 ;extension=php_gd2.dll
 新たに使用する画像関連の関数は5種類、これがなかなかおもしろい仕組みです。
1、getimagesize  これは画像のサイズを得る関数です。
2、imagecreatefromjpeg  formで受け取った画像から絵のデータを得るのです。
3、imagecreatetruecolor  画像を描く紙を用意するイメージですね。
4、imagecopyresampled  用意された紙に絵を縮小して描きこみます。
5、imagejpeg  できた画像をファイルにするのです。
1、list(タテ,ヨコ)=getimagesize(ファイル名);   //タテヨコのサイズを得る
2、データ=imagecreatefromjpeg("ファイル名");   //絵のデータを得る
3、紙 =imagecreatetruecolor(新ヨコ,新タテ);   //紙を用意する
4、imagecopyresampled(紙,データ,新ヨコ,新タテ,ヨコ,タテ);   //縮小して描き込む
5、imagejpeg(データ,"新ファイル名");   //ファイルとして作成する
 このスクリプトではアップした画像をヨコ100pxに縮小し保存しています。50枚を過ぎると古い物から削除するようにしました。
 また、縦長の画像をアップすると全体のバランスが崩れてしまうので横長の画像しかアップすることができません。名前はタイムスタンプを使って書き換え新しい画像が小さな数字になるようにしました。

 getimagesize はタテヨコ以外にもデータを得ることができるのですが、「美しい画像掲示板」で解説します。
 list はgetimagesize で得た5このデータのうち始めの2個だけを変数に入れるために使用しています。
  $data = getimagesize($file);
  $data[0] = タテ;
  $data[1] = ヨコ;
 でも同じですが、list の方がずっと便利ですね。 ⇒こんな感じ
スクリプトは ⇒こちらへどうぞ
2019/11
SUN MON TUE WED THU FRI SAT
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


 フォクすけ©2006 Mozilla Japan



制作:基礎から解るPHP入門講座 代表:FREEZE

Copyright © 2005/2/28 flzPHP.All Rights Riserved