Regie pub

Description

Ce code permet la mise en place d'une regie pub ;)
cette regie permet de compter le nombre de clicks et le nombre de fois que la pub a ete affichee. On specifie un nombre de clicks maximum, et lorsque ce nombre est atteint, la pub ne s'affiche plus ...
On peut donc faire payer un annonceur pour un nombre de clicks determiner

Je pense avoir fait un effort sur la presentation: code bien indenter, commentaire clairs (du moins pour moi mais tenez moi au courant)

Voila c'est ma premiere source postee sur phpcs ... peut etre d'autres (ou pas :P)

Source / Exemple :


<?php
/**

  • Regie pub
  • by : Superbaloo@clanfrance.com
  • Elle permet d'afficher une pub sur son site, ces pubs sont gerees par base de donnee, leur nombre de clics comptabilises,
  • et la pub disparait lorsque l'on arrive au nombre de pubs maximales.
  • Elle permet egalement de savoir le nombre de fois que la pub a ete vues par les utilisateurs.
  • L'heure a laquelle est cliquee la pub est egalement sauvegardee
  • /
error_reporting(E_ALL); define('_IN_PUB',true,true); session_start(); include(dirname(__FILE__).'/config.inc.php'); if(!$db = mysql_connect($config['db']['host'], $config['db']['user'], $config['db']['pass'])) { die(mysql_error($db)); } mysql_select_db($config['db']['db'],$db); if( !$result = mysql_query('SELECT `id`,`link` FROM `'.$config['db']['prefix'].'pub` WHERE `max_clicks` > `clicks`',$db) ) die(mysql_error($db)); $rand = rand(0,mysql_numrows($result)-1); if( !mysql_data_seek($result,$rand) ) die(mysql_error($db)); list($selectedId,$selectedLink) = mysql_fetch_row($result); /**
  • On a pluys besoin de ce resultat, on libere la memoire
  • /
if(!mysql_free_result($result)) die(mysql_error($db)); if( !$result = mysql_query('UPDATE `'.$config['db']['prefix'].'pub` SET `views` = `views` + 1 WHERE `id` = '.$selectedId.' LIMIT 1;',$db) ) die(mysql_error($db)); /**
  • On a plus besoin de la base mysql, on ferme la connection
  • /
if(!mysql_close($db)) die(mysql_error($db)); /**
  • On va parser le repertoire pubs/ a la recherche d'une image avec l'id $selectedId pour obtenir l'extension ;)
  • /
$image = null; if ($handle = opendir(dirname(__FILE__).'/pubs/')) { while (false !== ($file = readdir($handle))) { if(is_file(dirname(__FILE__).'/pubs/'.$file) && preg_match('!^'.$selectedId.'\.(png|jpg|gif)$!i',$file)) /**
  • Description de l'expression reguliere :
  • '!^'.$selectedId.'\.(png|jpg|gif)$!i'
  • $selectedId prend les valeurs 1, 2, 3, ... des chiffres
  • On pourra donc etudier
  • '!^1\.(png|jpg|gif)$!i' (par exemple ;)
  • le !! qui entoure l'expression est la syntaxe de PCRE un langage d'expression reguliere
  • utiliser notemment dans le perl mais egalement dans toutes les fonctions php commencant
  • par preg_.
  • le ^ juste au debut de l'expression reguliere symbolise le debut de la string, si elle n'y
  • etait pas, un fichiers test1.gif serait par exemple detecter avec cette expression reguliere
  • 1 est vous l'aurez compris le nom du fichier sans son extension
  • \. est le caractere . echappe, . represente une fonction particuliere dans les expressions
  • regulieres, on doit donc l'echapper pour qu'il soit compris comme le point dans la string
  • $file.
  • (png|jpg|gif) indique que l'on accepte differents formats, du jpeg, du png et du gif ;)
  • le | au milieu de tout ca permet de specifier un OU.
  • le $ juste avant le ! final specifie que c'est la fin de la string qui est la , si il n'y
  • etait pas, alors un fichier appeller 1.gif.php serait valide avec cette expression reguliere
  • et enfin le i a l'exterieur des !! est une "option", elle permet de ne pas etre sensible a la
  • casse, un fichier 1.jpg serait detecter sans mais un fihcier 1.Jpg ou 1.JpG ne serait pas
  • detecter, on rajoute donc ce caractere pour ne pas avoir a ecrire (rien que pour le jpeg)
  • (jpg|Jpg|JPg|JPG|jPG|jpG|jPG|JpG|jPg)
  • voila voila
  • /
{ $imagePath = './pubs/'.$file; /**
  • On stocke dans une variable session l'id de la pub affichee,
  • on la reutilisera dans click.php ;)
  • /
$_SESSION['pub']['id'] = $selectedId; $_SESSION['pub']['link'] = $selectedLink; $image = $file; } } closedir($handle); } if($image === null) { $imagePath = './pubs/0.jpg'; $image = '0.jpg'; $_SESSION['pub']['id'] = 0; } /**
  • On va maintenant lire le fichier et le renovyer au navigateur
  • /
$extensionImage = explode('.',$image); header('Cache-Control: no-cache, must-revalidate'); header('Pragma: no-cache'); header('Expires:'.gmdate("D, d M Y H:i:s", time() - 3600*24*365)); $imageFile = fopen($imagePath, 'r');// On ouvre l'image if(strtolower($extensionImage[1]) === 'jpg') { header('Content-type: image/jpeg'); }elseif(strtolower($extensionImage[1]) === 'png') { header('Content-type: image/png'); }elseif(strtolower($extensionImage[1]) === 'gif') { header('Content-type: image/gif'); } echo (fread($imageFile, filesize($imagePath))); fclose($imageFile); ?>

Conclusion :


Reste a faire le panneau admin : coming soon ;) (dans la semaine) stay connected ;)

Attention : une seule pub par page ;)

sinon le code html pour l'utiliser est par exemple : <a href="click.php" ><img src="pub.php" /></a>

je l'ai mis en initie, au pire un admin pourra la redescendre. J'ai fait ce choix car le code est optimise et respecte la semantique.
Exemple: j'utilise === au lieu de ==, '' au lieu de "", ...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.