November 05, 2006
PHPでランダムに広告を表示する11の方法
- 更新: 2007 年 03 月 04 日 15:37
- 2006 年 11 月 05 日 23:59 に asiamoth が投稿
- カテゴリー: ウェブデザイン・文章
- コメント (8)
Make money!
サイト管理者をやっていると「ランダムに広告を表示したい」というときがあると思います。いろいろ方法がありますが、今回はPHPを使った方法を紹介。
自分なりに「広告を表示するためのリストファイルを1つだけ用意して、そこからいくつかの広告を選んでランダム表示」というのを考えてみました。
よくある方法(直書き)
まずはよくある方法。「PHP ランダム 広告」で検索するとよく見る方法がこれですね。
<?php $rndtxt[0] = 'テキスト1'; $rndtxt[1] = 'テキスト2'; $rndtxt[2] = 'テキスト3'; $rndtxt[3] = 'テキスト4'; $rndtxt[4] = 'テキスト5'; $length = count($rndtxt) - 1; srand( (double)microtime()*1000000 ); $num=round( rand(0,$length) ); print("$rndtxt[$num]"); ?>
判りやすくていいのですが、
- メンテナンスが困難
- 複数のページで使いづらい
- コードが長くなりがち
という点が気になります。
少し工夫した方法(外部ファイルを利用)
外部ファイルを利用すると、少しメンテナンスが楽になります。
<?php srand((double)microtime()*1000000); $ad_list1 = file("/home/php/public_html/ad.txt"); $ad_key1 = array_rand($ad_list1, 2); $ad1 = $ad_list1[$ad_key1[0]]; // 表示 echo $ad1; ?>
この方法では
- 外部ファイルからデータを読み込む
- 行をランダムに並べ替え
- 並べ替えた最初の行を書き出す
という方法のようです。
こんなときどうする?
上記の方法でなんの問題もない場合の方が多いと思うのですが、たとえば、広告リストに
- まじめな広告1
- まじめな広告2
- まじめな広告3
- あやしい広告1
- あやしい広告2
- あやしい広告3
という広告表示用のコードを書いて、「トップページでは1~3を表示して、あるページでは4~6を表示、別のあるページでは1~6を表示」といったことはできません。
このように細かく表示を変更したい場合は、複数の広告リストを用意する必要があります。マンドクサイ!!
自分が考えた方法(任意の行を抜き出す)
ということで考え出したのが、こんなスクリプト。
<?php
srand((double)microtime()*1000000);
$ad_list = file('/path/to/ad-list.txt');
$ad_num = array(1,2,4);
$rand_key = array_rand($ad_num, 1);
$ad = $ad_list[$rand_key--];
echo $ad;
?>
$ad_numが工夫したポイントです。
$ad_listに広告リスト“ad-list.txt”の内容を代入$ad_numに「表示したい広告の行数」を代入$ad_numから「1,2,4」行の中からランダムに行数を抜き出し- 広告(
$ad)を出力
という感じ。
`$ad_list[$rand_key--]`で`$rand_key`から1を引いているのは、PHPの配列が「0」から始まるのに対して、一般的なエディタの行数が「1」から始まるので、合わせてみました。
上記の例でいうと“ad-list.txt”というファイルを用意して、一行に一つの広告表示用のコードを書いて、上記のPHPスクリプトで読み込んでください。
この記事のタグ(偽)
[タイトルは二進数][「I はぁと PHP」な人の添削を希望]
コメント
「Project MultiBurst」の管理人をしております、showBOOです。
引用していただき、光栄に存じます。
たしかにご指摘の通り、当方のやり方では管理が非常にめんどくさいです。
公開はしておりませんが、WEB上でのCSVエディタを利用して、広告表示と管理を行い、それをPHPコードで吐き出す、というツールを使っています。
で、現在、そのツールの公開を目指して開発中でございます(^^;)
亜細亜ノ蛾さんの提案しておられる、場所によっては違う広告を表示する、や、各広告にプライオリティー(出現頻度)をつける、といったものも盛り込もうかと考えております。
投稿者: showBOO | November 6, 2006 10:30 AM
(本人キター!!)こちらこそ、お目汚しな記事に目を通して頂いて、光栄です。きっと、「CSSってとかそーゆーのだよね」みたいにおかしなことが書いてあると思います。
新しいツール、期待して待ってます!
投稿者: asiamoth | November 6, 2006 01:37 PM
こちらの記事のスクリプトを試させていただいたのですが、
「1,2,4行目の中からひとつ」ではなく「1~3行目の中からひとつ」
表示されてしまうようです。
$ad_numで指定した行数(1,2,4)ではなく、$ad_numに書かれている
数字の個数(3)の中から選ばれるようになっているように思うのですが、
いかがでしょうか。
※もし当方の間違いのようであれば申し訳ありません
投稿者: Anonymous | June 5, 2007 06:02 PM
こんにちは!PHPでランダム表示させるスクリプトを探していて、ここにたどり着きました。
とても参考になりました!ありがとうございます。
また、表示させる広告を一つだけではなく複数表示させたいと思っているのですが、どうすればよいでしょうか?
たとえば、
ad-list.txt に
テキスト1
テキスト2
テキスト3
と書いて、
表示ページには、
テキスト2 テキスト1 テキスト3
のように表示させたいと考えています。
お手数ですが、お力添え頂ければと思います。
投稿者: つよしおか | May 1, 2008 12:10 PM
つよしおか さん、どうもです。質問の件なら、下記のように単純なコードで実現できます。
<? $ad_list = file('/path/to/ad_list.txt'); $ad_num = array(2,1,3);foreach($ad_num as $val) {
echo $ad_list[--$val] . '<br>';
}
?>
しかし──、本文のコードも上記のコードも、「美しくない」です。それが分かるくらいには、PHP も慣れてきたのですが……。
いつか、ちゃんとしたキレイなコードで、この記事を書き直しますね。
投稿者: asiamoth | May 3, 2008 10:35 AM
お忙しい中、早速のご返信ありがとうございます!
すみません、説明不足でした。
アクセスするたびに、
テキスト2 テキスト1 テキスト3
or
テキスト3 テキスト2 テキスト1
or
テキスト3 テキスト1 テキスト2
or
テキスト1 テキスト2 テキスト3
のように、ランダムで並び順が変わるように
したいと思っています。
お手数をおかけいたしまして、
大変申し訳御座いませんが、ご返信頂ければと思います。
それでは宜しくお願いいたします。
投稿者: つよしおか | May 4, 2008 07:45 AM
遅くなりましたが、こんな感じで どうですか?
// 広告リストの場所 $ad_list = file('/path/to/ad_list.txt'); // 何行目を使う? $ad_array = array(2,4,6,8);srand ((float) microtime() * 10000000);
$ad_num = count($ad_array);
$rand_keys = array_rand ($ad_array, $ad_num);
for($i=0; $i<$ad_num; $i++){
print $ad_list[--$ad_array[$rand_keys[$i]]] . '<br>';
}
この例だと、2,4,6,8 行目をランダムに並べ替えて表示されます。
投稿者: asiamoth | May 5, 2008 12:13 PM
できました!!
ありがとうございます!
投稿者: つよしおか | May 6, 2008 11:37 AM
コメントを投稿
"PHPでランダムに広告を表示する11の方法" にコメントを投稿することができます。お気軽にどうぞ。