広告ローテーションシステムの一例(ファイルアップロード方式含む)

WBOY
リリース: 2016-06-21 09:02:45
オリジナル
908 人が閲覧しました
オンライン広告はインターネット上で広く知られるようになりました。そして、468x60 は広告主が頭を悩ませるサイズになっています。
広告を処理するときに、ブラウザを使用して広告の 468x60 の画像ファイルを広告を処理するサーバーに直接送信できれば、非常に快適です。FTP プログラムを開いてほとんどの費用を費やす必要はありません。アップロードするだけの日。

この問題は、ASP、Prel などを含むすべての Web CGI プログラムにとって厄介な問題であり、この問題を達成するにはシステム コンポーネントを追加する必要があります。最も強力な Web CGI プログラムとして知られる PHP は、この点で期待を裏切らないパフォーマンスを発揮し、他の CGI ツールをも上回っています。

ファイル アップロード機能は RFC 1867 文書で詳しく説明されており、特殊なファイル形式 (コンテンツ タイプ) multipart/form-data が使用されます。ファイルをアップロードするには、ブラウザが Netscape 3.0 以降、または MS Internet Explorer 4.0 以降である必要があることに注意してください。

まず以下の HTML ソース コードを見てください


method=post> 🎜 >あなたの名前:

ファイル名:




form タグに enctype="multipart/form-data" という文字列を追加します。同時に、ユーザーが入力したデータにファイルがアップロードされているため、メソッドは GET ではなく POST を使用する必要があります。

上記のコードで、ユーザー名が Wilson Peng でファイル c:myphoto.gif が選択されている場合、ユーザーが送信ボタンを押した後、ブラウザーは次の POST データを送信します。


コンテンツ タイプ: multipart/form-data、境界=AaB03x

--AaB03x
コンテンツ ディスポジション: フォーム データ;
Wilson Peng
--AaB03x
content-disposition: form-data; name="myfile"
Content-type: multipart/mixed、boundary=BbC04y

--BbC04y
Content-disposition:attachment; filename="myphoto.gif"
Content-type:image/gif
Content-Transfer-Encoding:バイナリ

...myphoto.gif コンテンツは省略されています...
--BbC04y--
--AaB03x--


上記のデータでは、boundary=AaB03x が異なるフィールドのデータを区切るメッセージです。 AaB03x のエンコード方法はブラウザのバージョンによって異なり、通常はブラウザのハッシュによって生成されます。次に、
--AaB03x を使用してさまざまなフィールドを区切る様子を確認できます。

上記の例では、フォームを処理するアクション プログラム next.php が 4 つの変数を自動的に生成します。以下の表を参照してください。

変数名の説明
$myfile はアップロードされたファイルですcontent
$myfile_name ユーザー側でアップロードされたファイルの名前
$myfile_size アップロードされたファイルのサイズ
$myfile_type アップロードされたファイルの形式 ("image/gif" など)


next.php プログラム内 最も重要なことは、これら 4 つの変数をうまく活用することです。そうしないと、ユーザーがアップロードしたファイルはプログラムが終了するとすぐに消えてしまいます。したがって、まず $myfile を広告画像が保存されているディレクトリにコピーする必要があります

copy($banner,"/home1/biglobe3/ad/".$banner_name); このプログラムはファイルをディレクトリ /home/htdocs/ad に保存します。上記の例では、ファイルを /home/htdocs/ad/myphoto.gif に保存します。重要なことは、保存するディレクトリは WebServer から読み取れないディレクトリであってはならず、インターネット上で参照できる Web サイトのホームページがあるディレクトリに配置する必要があるということです。

おそらく、取得したファイル サイズがシステムによって報告されたサイズと同じかどうかの比較など、プログラムでより詳細な処理が必要な場合は、$myfile_size 変数を使用できます。

フォームに設定した入力ファイルの名前を変更すると、



変数は $upfile、$upfile_name、$upfile_size、$upfile_type に変更されます。

したがって、次の例では、ファイル アップロードと Oracle 7.x バックエンド データベースを使用してファイルを Web ホームページ ディレクトリに配置し、関連情報が Oracle に保存されます。もちろん、ユーザー認証を追加すると、アカウントを持つユーザーが画像をアップロードできるため、クラッカーによるわいせつな広告や不適切な広告のアップロードを防ぐことができます。この例のデータベース設定は、5.4 メッセージ ボードの設定と同じです。




// adadd.php
if (($banner=="") and ( $url=="")) {
新しい広告を追加</head> <br><body>数値が大きいほど、画像が表示される可能性が高くなります。デフォルトは 1 です。 <br><FORM ENCTYPE="multipart/form-data" ACTION="adadd.php" <br/>METHOD=POST> <br><tr><td align =right>広告バナー: </td><td><input name=banner <br/>TYPE="file"></td></tr> <br><tr>< td align=right>広告 URL: </td><td><input name=url <br/>type=text size=30></td></tr><tr><td align=right>辅助字串 ALT: </td><td><input name=alt <br/>type=text size=30></td></tr> ; <br><tr><td align=right>广告说明: </td><td><input name=descript <br/>type=text size=30></td></ tr> <br><tr><td align=right>显示加权: </td><td><input name=priority <br/>type=text size=5 value=1></td> </tr> <br><tr><tdcolspan=2 align=right><input type="submit" VALUE="确定 <br/>"></td></tr> <br></table> <br></FORM> <br> <br>} else { <br>if (file_exists("/home/htdocs/ad/".$banner_name)) { <br>CommonHeader("档案 ".$banner_name." 已存在"); <br>echo "<p><br><br>广告档案すでに存在します<br>n<p><br><br></body></html>"; <br>終了; <br>}; <br><br>copy($banner,"/home1/biglobe3/ad/".$banner_name); <br><br>putenv("ORACLE_SID=WWW"); <br>putenv("NLS_LANG=american_taiwan.zht16big5"); <br>putenv("ORACLE_HOME=/home/oracle/product/7.3.2"); <br>putenv("LD_LIBRARY_PATH=/home/oracle/product/7.3.2/lib"); <br><br>putenv("ORA_NLS=/home/oracle/product/7.3.2/ocommon/nls/admin/data"); <br><br>putenv("ORA_NLS32=/home/oracle/product/7.3.2/ocommon/nls/admin/data"); <br><br>$handle=ora_logon("user38@WWW","iam3849") さもなければ死ぬ; <br>$cursor=ora_open($handle); <br>ora_commitoff($handle); <br><br>$query="広告に挿入(url, バナー, alt, 説明文, 優先順位) <br>values('$url', '$banner_name', '$alt', '$descript', $優先度)"; <br>ora_parse($cursor, $query) または die; <br>ora_exec($cursor); <br>ora_close($cursor); <br>ora_logoff($handle); <br><br>echo "<title>广告新增完了";
エコー "";
エコー "";
echo "alt="".$alt."" border=0>< ;/a>

";
エコー "

    ";
    echo "
  • 广告网址: ".$url;
    echo "
  • 辅助字串: ".$alt;
    echo "
  • 广告说明: ".$descript;
    echo "
  • 显示加权: ".$priority;
    エコー "
";
}

?>




当然、上の表の式を使用する前に先忘れして広告资料表、SQL 及び栏位如下


CREATE TABLE ad (
url varchar2(1024) ) null ではありません、
banner varchar2(1024) null ではありません、
alt varchar2(255) null、
descript varchar2(255) null、
優先順位番号(4) null ではありません、デフォルト 1
);

序号 栏位名 资料形态 资料长度 栏位说明
0 广告网址 url varchar2 1024
1 图片路径バナー varchar2 1024
2 文字列表示 alt varchar2 255
3 广告说明説明 varchar2 255
4 表示加权優先度番号 4 1 は内定,0 表用停止


值得一提的是在这了加权的機能,若一广告要提升露光
が追加される桁数をたとえば 5 に増やすと、その発生率は 1 の高さの 5 倍になるだけです。 🎜>// ad.php
putenv("ORACLE_SID=WWW");
putenv("NLS_LANG=american_taiwan.zht16big5");
putenv("ORACLE_HOME=/home/oracle/product/7.3.2");
putenv("LD_LIBRARY_PATH=/home/oracle/product/7.3.2/lib");

putenv("ORA_NLS=/home/oracle/product/7.3.2/ocommon/nls/admin/data");

putenv("ORA_NLS32=/home/oracle/product/7.3.2/ocommon/nls/admin/data");

$handle=ora_logon("user38@WWW","iam3849") さもなければ死ぬ;
$cursor=ora_open($handle);
ora_commitoff($handle);

$query="優先度
> 0 の広告から URL、バナー、代替、優先度を選択します";
ora_parse($cursor, $query) または die;
ora_exec($cursor);
$i=$pricount=0;
while(ora_fetch($cursor)) {
$ad[$i][0] = ora_getcolumn($cursor,0);
$ad[$i][1] = ora_getcolumn($cursor,1);
$ad[$i][2] = ora_getcolumn($cursor,2);
$ad[$i][3] = ora_getcolumn($cursor,3);
$pricount += $ad[$i][3];
$i++;
};

ora_close($cursor);
ora_logoff($handle);

srand((double)microtime()*1000000);
$pri = rand(1,$pricount);
$pricount=0;
for($i=0; $i$pricount += $ad[$i][3];
if ($pri <= $pricount) {
$ad1[]="
src=/ad/".$ad[$i][1]." width=468 height=60 border=0
alt="".$ad[$i][2]."">
";
}
}
echo $ad1[0];

?>


上記のプログラムは公開広告表示プログラムであり、$pricount 変数はすべての広告の優先度の合計です。プログラムは、まずすべての広告情報を配列変数 $ad に読み取り、データベースを閉じます。次に、時間に基づいてランダムなシードを取得し、1 から $pricount までの数値をランダムに選択します。

Web ページで広告プログラムを使用するには、広告が必要な場所に を追加するだけです (httpd.conf 内)。最初にセットアップする必要があります。

上記のプログラムにはまだ改善の余地があり、広告のクリックログ機能を追加したり、表示ログ機能を追加したり、表示重み付けプログラムを変更したりできます。例として、ここではパッケージ開発ではなく、PHP の実践的なアプリケーションとプログラム開発を紹介します。既製の広告パッケージが本当に必要な場合は、http://www.phpwizard.net/phpAds にアクセスしてください。これは、PHP で開発された一連の広告プログラムです。 (CCU ニュース グループからの抜粋。元の出典は台湾で出版された PHP に関する書籍である可能性があります: PHP Book)



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!