PHP ランダム表示機能付きバナーリンク集
画像のアップロードについて勉強したので、タイトルの通りバナーリンク集、的なものを勢いで作ってみた。以前、実務でバナー画像を並べる部分があって、それをアクセスするたびにランダムで並び替えたいみたいな要望があった。その時は手打ちで配列に内容を入れてjavascriptで並び替えるっていう方法を使おうってことになったんだけれども、んじゃそれ、PHPでやってみる!
用意する機能
- URLと画像の登録
- それらの修正
- それらの削除
- 表示件数指定(全件表示か件数指定選べるようにする)
- ランダム表示指定(ランダム表示するかしないか)
- 別窓指定(バナーをクリックした時_blankで開くかどうか)
用意するファイル
- config.php いろいろ自分で設定した項目を入れる
- data.dat ログデータを保存する
- /images 登録した画像を保存するディレクトリ
- function.php よく使いそうなものを入れる
- index.php 今回の主人公 処理していく人
- view.php 表示画面ページ
- style.css 管理画面の見た目用
config.php
いろいろ自分で設定した項目を入れるファイル。パスワード、バナー画像保存ディレクトリ、新規投稿・一覧・削除画面のファイル名、表示画面のファイル名、CSSファイル名、管理画面のタイトル、新規投稿完了画面のタイトル、削除完了画面のタイトル、修正画面のタイトル、修正完了画面のタイトル、エラー画面のタイトル、表示件数設定、ランダム表示設定、別窓設定をこのファイルで指定する。
ソースをそのまま書こうと思ったんだけど、どのファイルもソースが長いので今回は折りたたみにしてみた。
data.datと/images
これは普通に空のdatファイル、空のディレクトリを作る。用意したのを上のconfig.phpの中で指定してる。
function.php
よく使いそうなものを入れたファイル。とかいいつつ、ほとんどが画面を表示するhtmlを書いてるだけだったりもするのだけれども。check_image_error()とcheck_image_type()の部分ではアップロードされた画像に対してのエラーチェックを。エラーがあれば$errorの中にエラー内容を代入。
check_image_error()ではマニュアルのエラーメッセージの説明の内容を入れたのだけれども、値がUPLOAD_ERR_NO_FILEの時しかエラーが出ない。というか、php.iniをいじって最大アップロードサイズを小さくしてからそれより大きなサイズのファイルを登録したり、テンポラリフォルダをなくして試したり、わざといろいろエラーが出るように自分では頑張ってみたんだけどエラーが出ないの。゜(゚´Д`゚)゜。ウァァァン
エラーを出そうとしてるのにエラーが出ずにどうなってるかというと、送信ボタンを押した後、2秒くらいたってから同ページが何事もなかったように表示される。データのログにも内容は入らず。よくわからん。XAMPPだからそうなるっていう可能性もあるんかな。それとも何か書き方おかしいんかな。エラーの値だけprintしようと思っても0(ファイルアップロードOK)か4しか出てきません>< 何かソースが間違ってるんかな・・・わからーん。
check_image_type()の方では拡張子のチェックを。今回はバナー画像を登録するので jpg、gif、png 以外の拡張子がついてるものはエラーにした。
index.php
処理を頑張るファイル。
ファイルにアクセスして何も送信ボタンが押されてなかったら新規登録フォームと一覧を表示。
新規登録の内容を入力し、ボタンが押されたらエラーチェック、エラーがなければ画像は指定したディレクトリへコピー、URL、画像のパス、時間は1行にしてログデータ用ファイルへ追加。
削除ボタン左のラジオボタンにチェックを入れて、削除ボタンが押されたらそのデータを削除してデータファイルを上書き。該当データ行はラジオボタンの値で判断してる。
「修正画面へ」ボタンが押されたら修正画面へ。
修正画面ではURL部分には予め元の文字列を入れたテキストフォームを用意しておく。画像の部分は今の画像と修正用の入力フォームを用意。
※登録されてる写真はイメージです。適当なバナー画像がありませんでした!
URL、画像内容(どちらかでも両方でも)を変更し修正ボタンが押されたら、どの行のデータかを修正ボタン横のラジオボタンから受け取った値で調べて、その行に「受け取った修正URL、修正画像、時間」の値を新しい行として上書きし、配列に戻してファイル全体を上書き。
画像に関してはファイル名を上書きしてる。但し、拡張子が変わる可能性があるので(元jpg→変更後pngとか)拡張子の部分だけ切り離して、新しいファイルの拡張子をくっつけるようにした。
つーか、修正部分、めっちゃ苦戦しました。普通のテキストファイルにデータ入れてて、その中の1行修正するのってやっぱりこうやって一旦取り出して配列の中身を一部書き換えて全体を保存っていう手順しかないんだろうか。前にどっかの同じような箇所で同じ疑問を抱いたまま何も解決してなかったなぁ、そういえば。
あぅ!このエントリ書きながら改めて見直してたら、これまた新規登録にはパスワードいるのに削除や修正にはいらないんだな。ミスった。せっかくこの前Authの勉強もしたのに・・・。前にこのブログで書いてたソースを使い回ししてますな箇所が山盛りだにゃー。URLの形が合ってるかどうかのチェックもしてないし。が、手直しする気力、本日はナシ。
view.php
これは実際に表示されるページの画面。2行だけ。function.phpの最後にここに出力されるhtmlソース入れておいたのでそのまま呼び出し。ULリストでマークアップしてるだけだからインクルードするならこんな感じ。
このファイルをそのまま使うならこんな感じで普通に該当箇所で関数呼び出す。
style.css
これはいらんと思うけど、一応上のキャプチャで使ってるような見た目になるCSS。
<< PHP ファイルのアップロード 勉強メモ | PHP 画像にロゴを入れる >>
トラックバック
このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/240
コメント (3)
> つーか、修正部分、めっちゃ苦戦しました。
つ データベース。
DBつかうと嘘のように簡単になりますよ。PHPでSQLiteが使えるので試しにいかが^^
投稿者: hogepage | 2010年01月21日 18:30
>きのこる先生
SQLite、なんか気軽に使えていいですよね。いまいちよく分からない型とかもないし、なんとなく親近感は持ってます。
やっぱPHPとか勉強していくならデータベースって避けて通るのは損なんですかねー。うーん。やってみまっす!
投稿者: Red | 2010年01月22日 09:27
はじめまして。
いろいろランダム画像表示を探していてここに来ました。
セット化されていないので、自分でコピペするのだと思うのですが、パーミッションもどう設定したら良いのでしょうか?
教えて頂けないでしょうか。
投稿者: 横山 茂 | 2011年03月24日 21:35