PHP は広告ローテーションを実装します

WBOY
リリース: 2016-06-21 09:05:10
オリジナル
951 人が閲覧しました

广告

网络广告,变成了 Internet 上的热门学问。而 468x60 更变成了广告人员绞尽脑汁的尺寸。

在处理广告时,若能直接使用浏览器将广告的 468x60 图文件送到处理广告的服务器中,相信是件很舒服的事,不用再开 FTP 程序,搞大半天只为了 upload。

这个问题,是所有 Web CGI 程序的痛,包括 ASP、Prel....等等,都需要再经过系统元件的增加才能达成。号称最强的 Web CGI 程序: PHP,在这方面的表现没有令人失望,甚至傲视其它的 CGI 工具。

File Upload 功能在 RFC 1867 文件有有详细的说明,是利用特殊的文件格式 (content-type) multipart/form-data。值得注意的是浏览器一定要用 Netscape 3.0 以上或 MS Internet Explorer 4.0 以上的版本才能将文件上传。

先看下面的 HTML 源代码


您的大名: 

文件名称: 



在 form 的标签中,要加入 enctype="multipart/form-data" 的字符串,表示用户输入的资料上有文件上传,同时 method 一定要用 POST 而不能用 GET。

在上面的码中,若用户姓名填入 Wilson Peng,并选 c:\myphoto.gif 的文件,在用户按下送出键后,浏览器则传送出下面的 POST 资料。

Content-type: multipart/form-data, boundary=AaB03x--AaB03xcontent-disposition: form-data; name="user"Wilson Peng--AaB03xcontent-disposition: form-data; name="myfile"Content-type: multipart/mixed, boundary=BbC04y--BbC04yContent-disposition: attachment; filename="myphoto.gif"Content-type: image/gifContent-Transfer-Encoding: binary  ...myphoto.gif 内容略...--BbC04y----AaB03x--
ログイン後にコピー

看到上面的资料中,boundary=AaB03x 即为分开不同字段资料的信息,其中的 AaB03x 编码方法,视浏览器的版本不同而异,通常是浏览器哈稀产生的。之后就可以看到用 --AaB03x 来隔开不同的字段。

以上面为例,处理 form 的 action 程序 next.php,会主动产生四个变量,见下表

变量名 说明
$myfile 即上传的文件内容
$myfile_name 上传文件在用户端的名称
$myfile_size 上传文件的大小
$myfile_type 上传文件的格式,如 "image/gif"

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

copy($banner,"/home1/biglobe3/ad/".$banner_name) );

このプログラム行は、ファイルをディレクトリ /home/htdocs/ad に保存します。重要なことは、保存するディレクトリは Web サーバーから読み取れないディレクトリであってはならず、ネットワーク上で参照できるように、Web サイトのホームページが配置されているディレクトリに配置する必要があるということです。

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

フォームに設定された入力ファイルの名前が変更されると、アップロード内の変数も変更されます。

その後、変数は次のように変更されます。 $upfile、$upfile_name、$upfile_size、および $upfile_type。

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



// adadd.php
if (($banner==" " )そして ($url=="")) {
?>
新しい広告を追加

重み付けされた値の数値が大きいほど、画像が表示される確率が高くなります。デフォルト値は 1 です。



;td>




広告バナー:
広告 URL:
補助文字列 ALT:
広告の説明: input name=descript type=text size=30>
表示の重み付け:




} else { if (
file_exists("/home /htdocs) /ad/". $banner_name)) {
Commonheader ( "file" ファイル ". $banner_name." は既に存在します " ); echo
"



広告ファイルはすでに存在します



";exit;
};

  
copy($banner,"/home1/biglobe3/ad/".$banner_name);

  
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") or die;
  
$cursor=ora_open($handle);
  
ora_commitoff($handle);

  
$query="insert into ad(url, banner, alt, descript, priority) values('$url', '$banner_name', '$alt', '$descript', $priority)";
  
ora_parse($cursor$query) or die;
  
ora_exec($cursor);
  
ora_close($cursor);
  
ora_logoff($handle);

  echo 
"广告新增完成";
  echo 
"";
  echo 
"";
  echo 
".$banner_name." alt=\"".$alt."\" border=0>

";
  echo 
"

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

?>


当然要使用上面的程序之前别忘了先增加 ad 资料表,SQL 及字段如下

CREATE TABLE ad (  url       varchar2(1024) not null,  banner    varchar2(1024) not null,  alt       varchar2(255)  null,  descript  varchar2(255)  null,  priority  number(4) not null default 1);
ログイン後にコピー

序号 字段 名称 资料类型 资料长度 字段说明
0 广告网址 url varchar2 1024
1 图片路径 banner varchar2 1024
2 字符串显示 alt varchar2 255
3 广告说明 descript varchar2 255
4 显示加权 priority number 4 1 为默认值,0 表停用

ここで重み付け機能が追加されていることに注意してください。広告の露出を増やしたい場合は、重み付けを表示するフィールドの数を増やすことができます (たとえば 5)。表示される確率は 5 倍高くなります。 1. 倍にのみ設定されている場合よりも。

// ad.php
putenv("ORACLE_SID=WWW");
putenv ("NLS_LANG=アメリカ_台湾.zht16big5");
putenv("ORACLE_HOME=/home/oracle/product/7.3.2");
putenv("LD_LIBR) ARY_PATH=/ホーム/ 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、バナー、alt、優先度を選択します";
ora_parse( $cursまたは ,$query) それとも死ぬ;
ora_exec($cursor);
$i=$pricount= 0;
ながら(
ora_fetch($cursor)) {
$ad[$i][0] = ora_get列($カーソル ,0);
$ad[$i][1] = ora_getcolumn() $カーソル ,1 ) ;
$ad[$i][2] = ora_getcolumn($cursor,) 2 );
$ ad [$i][3] = ora_getcolumn($cursor,3);
$プリカウント += $ad [$i][3];
$i
++;};

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

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

?>
上のプログラムは、公開されているレポート表示プログラムであり、$pricount の値はすべてのレポートの優先順位に加算されます。
ネットワーク内で使用される報告プログラムは、報告が必要な場所でのみ追加されます。

 include("ad.php"); ?> 当然、 (httpd.conf 内に) パスを含めて事前に実行する必要があります。 上のプログラムには、追加のスペースがあり、報告されるクリック ログ機能を追加したり、表示されたりすることもできます。ログ機能、表示されるプログラムの変更などは例に挙げられませんが、これは PHP を介して実行される実用的なアプリケーションおよびプログラムであり、パッケージの公開ではありません。 http://www.phpwizard.net/phpAds

、これは PHP 用に公開された報告プログラムです。



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