begin process at 2010 03 21 17:09:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > REGIE PUB

REGIE PUB


 Information sur la source

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Astuces Classé sous :regie, pub, publicite Niveau :Initié Date de création :16/05/2006 Date de mise à jour :17/05/2006 22:37:14 Vu / téléchargé :5 758 / 460

Auteur : superbaloo78

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 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

  • <?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);
  • ?>
<?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 "", ...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

16 mai 2006 19:18:07 :
Ajout du code html :)
17 mai 2006 18:45:02 :
ptite modif ;)
17 mai 2006 22:37:14 :
Modif : On n'utilise plus la GD, j'utilise maintenant mysql_seek_data au lieu d'avoir un parsage complet de la reponse sql

 Sources de la même categorie

Source avec une capture PAGINATION EN PHP par Orangina
Source avec Zip POO - DEBUGGER par DiGhan
Source avec Zip CRAWLER DE SITE EN PHP par Mcjo
DÉCOUPAGE D'UN TEXTE EN FONCTION DES SAUTS DE LIGNES par biloubil
RÉCUPÉRER LE CHEMIN RELATIF D'UN OBJET PAR RAPPORT À LA RACI... par FredPsy

 Sources en rapport avec celle ci

Source avec Zip PUBTEK V1.0 (SCRIPT DE PUB) par samirpaul

Commentaires et avis

Commentaire de ImmortalPC le 17/05/2006 14:57:25

Salut,

nikel ;-)
A 2 petits trucs :-)
- $extensionImage = explode('.',$image);
ça marche bien si le nom de ton image n' a pas de .
0.gif ça marche.
google.fr.gif ça marche plus.

Donc perso je fais :
$extensionImage = explode('.',$image);
$extensionImage = $extensionImage[count($extensionImage)-1];

- Faire un switch pour 3 choix ça te ralentis pour rien.
vaux mieux faire un if et des elseif.

Sinan je remplacerais :
$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));

switch(strtolower($extensionImage[1]))
{
case 'jpg':
$gdImage = imagecreatefromjpeg($imagePath);
header('Content-type: image/jpeg');
imagejpeg($gdImage);
break;
case 'png':
$gdImage = imagecreatefrompng($imagePath);
header('Content-type: image/png');
imagepng($gdImage);
break;
case 'gif':
$gdImage = imagecreatefromgif($imagePath);
header('Content-type: image/gif');
imagegif($gdImage);
break;
}

Par

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));

$info_img = getimagesize($info_img); // On obtiens des infos sur l'image
header('Content-type: '.$size['mime']);// On envoie le type de l'image
$fp = fopen($image, 'r');// On ouvre l'image
echo (fread($fp, filesize($image)));// On lit l'image
fclose($fp);// On ferme l'image

C' est koi le plus rapide ??
fopen ou les fonctions de création des images ???

10/10 ;-)
@+

Commentaire de superbaloo78 le 17/05/2006 18:42:44

>- $extensionImage = explode('.',$image);
>ça marche bien si le nom de ton image n' a pas de .
>0.gif ça marche.
>google.fr.gif ça marche plus.
>
>Donc perso je fais :
>$extensionImage = explode('.',$image);
>$extensionImage = $extensionImage[count($extensionImage)-1];
en effet ... ,mais c'est des id et il n'y aura pas de points dedans ;) donc pas besoin de le traiter :P

pour le switch ... oui je vais le faire :P le seul truc c'est que j'avais la fleme de faire des if elseif .. je le ferais ;)

sinon ouais j'ai pas penser au fopen qui je pense est plus rapide... le imagecreatefromjpeg est lent car il fait un fopen + traitement d'image ;)

merci de tes conseils ... je modifie ca sous peu

Commentaire de stepibou le 17/05/2006 21:06:22

hello

avec getimagesize tu recupere le format de l'image...
ensuite, il faut liberer la mémoire de l'image.

tres drole de manière de programer :
pourquoi n'utilise tu pas mysql_fetch_array ?
au lieu de tes boucles, ta base doit etre mal géré...

fin bon, pour moi c'est tres tres loin d'etre parfait.

a+

Commentaire de superbaloo78 le 17/05/2006 22:10:14

Salut
oui je connaissait pas getimagesize ;) mais bon je vais repasser en fopen plus rapide je pense comme me l'a conseiller ImmortalPC cela evite d'utiliser la GD.

Sinon mysql_fetch_array bouffe plus de ram que mysql_fetch_row comme je le fait ici, en effet cela retourne un tableau associatif, donc plus de ram (ca se joue pas a beaucoup mais bon ... un peu + un peu+ un peu = beaucoup :P). Sinon mes mysql_fetch_row a repetition ici me permettaient d'atteindre la ligne que je voulais dans la sql (la ligne $selectedId). Cependant je viens de voir mysql_data_seek qui permet d'atteindre cette ligne directement ;) je modifie mon code avec ces dernieres decouvertes et je poste ;)

Commentaire de ImmortalPC le 18/05/2006 13:32:17

Salut,

Au lieu de faire
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');
}

fais :
$info_img = getimagesize($info_img); // On obtiens des infos sur l'image
header('Content-type: '.$size['mime']);// On envoie le type de l'image
unset($info_img);

@+

Commentaire de superbaloo78 le 18/05/2006 18:47:17

nan ca je ne veut pas car ca serait la seule fonction demandant la librairie gd ... je ne souhaite pas l'utiliser ... certains hebergeurs la bloque car elle demande souvent trop de puissance ... :)

donc non je n'utiliserais pas cette fonction

Commentaire de ImmortalPC le 19/05/2006 13:07:49

ok
je savais pas ;-)
@+

Commentaire de stepibou le 19/05/2006 15:19:10

Bon, moi je note pas, de toute facon les notes ne veulent rien dire...
Mais si j'avais noté, j'aurrai mis que 5.

Je t'explique pourquoi : tu parle d'optimiser les resources..
Bon, pour le gd sit'en a pas besoin, en effet c'est peut etre bon.
Mais pour le reste ( a verifier que c 'est plus rapide )
En tout cas tu pert grave en lisibilité et simplicité de ton code. Pour un petit projet ca va, mais ensuite pour un gros... C'est pas dit qu'au contraire ca te demande pas plus de ressource..
Pour un bon code est d'abord un code court et clair...
ce qui n'est pour l'instant pas le cas.

Sinon, ca :
# $imagePath = './pubs/0.jpg';
#     $image = '0.jpg';

Faidrai que tu le parametre au debut de ton code et non, en plein milieu comme un cheveux sur la soupe..

Ne te sent pas offusqué, c'est pour te faire avancer que je dis ca.

Bon code !.
a+

Commentaire de superbaloo78 le 19/05/2006 20:22:06

Effectivement,
c'est mieux comme ca ca m'evite encore des tests et de la rapidite

Merci pour ce conseil

Commentaire de LaurentKOogar le 22/05/2006 02:51:37

bien le script :-) le titre un peu ronflant, une regie pub c'est quand meme bien plus conplexe que 3 stats sur des images.

Commentaire de kaizer63 le 19/12/2008 23:22:25

Bonsoir a toutes et tous, je vient de tester ton code et voici l'erreur qui en ressort :

Warning: mysql_data_seek() [function.mysql-data-seek]: Offset 0 is invalid for MySQL result index 4 (or the query data is unbuffered) in E:\Serveur\pub.php on line 34

Voici le contenu de la ligne 34 :

if( !mysql_data_seek($result,$rand) )


Je ne comprend pas lourd car moi et le codage php sa fait deux, je ne sait coder que Index.php?Page=xxx lol

Qui pourais m'indiquer le probleme ? Cordialement et merci par avance.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Incompréhensible [ par bcmfr ] Slt à tous,je fais appel a vous car la je comprends rien...voici mon code:$result=mysql_query("select * from pub where valide='1' order by RAND() LIMI Creér 1 lien direct d'une pub auto généré se trouvant dans 1 page *.php [ par golfy06 ] Bonjour, une petite question pour qui cela paraitra simple pour certain, mais je n'y arrive pas.Comment peut on faire exécuter une pub qui change tout hebergeur gratuit sans pub [ par rems02 ] je cherche un hebergeur gratuitsans pub pour les pages en phpRem'S Pub ulimit [ par nico606 ] g trouvez par hasar sur une redirection ulimit :&lt;HTML&gt;&lt;HEAD&gt; &lt;TITLE&gt;Redirect by ulimit.com&lt;/TITLE&gt; &lt;META NAME="generator" C Forcer l'affichage d'une pub [ par smasher81 ] Bonjour à vous, J'aimerais savoir comment puis-je mettre une banniere dans exemple toutes les pages d'un dossier ... Exemple Multimania.. on ne voit p Voici des hebergeurs gratuits php/mysql et sans pub [ par aladdin ] Bonjourj'aimerai juste vous dire qu'un nouveau site à vu le joursil contient une base de donnée d'une centaine d'hebergeurs gratuits et sans pub, offr Hébergeur gratuit sans pub [ par surchat ] Salut &#224; tout le monde,Je cherche un herbergeur gratuit sans pub, est-ce que quelqu'un en connait un ?Merci d'avance j'ai trouvé Le meilleur hebergeur du monde !!!! [ par Luffy26 ] - Gratuit - Avec une minuscule pub (http://circon.freestarthost.com regardez : la pub c'est la petite barre en haut) - PHP/MySQL - Perl/Cgi-Bin - 100 recherche code pour suprimé la pub sur lycos [ par ma_pomme ] donc voila tout est dans le titre je cherche donc un code pour supprim&#233; cette foutu pub. Il m'avais sembl&#233; voir &#231;a dans les mail hebdo Voici un hébergement gratuit sans pub 500 Mo + Mysql + PHP + htAccess + bande passante illimitée [ par MadM@tt ] Bonjour &#224; tous, j'ai pas l'habitude de faire de la pub mais bon faut voir le nombre de post ou les gens demandent un h&#233;bergement php gratui


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales