IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PHP probleme compteur de visites


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut PHP probleme compteur de visites
    Bonjour à tous !

    Je cherche à créer un compteur en PHP pour mon site web et bien que j'aie cherché un long moment, je n'y arrive toujours pas.
    Je pense qu'il y a des erreurs dans la rédaction de mon code, mais je comprends pas trop, pas vraiment.
    Voici donc le code que j'ai rédigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
     
    <?php
    	//J'ai fait le choix de creer a la base des fichiers texte qui contiennent deja les valeurs.
    	//Au debut, le fichier contenant le nombre de visites contient un nombre qui vaut zero, bien entendu.
    	// Recuperation de l'adresse IP externe du visiteur :
    				$IPvisiteur = $_SERVER["REMOTE_ADDR"];				
    				echo '$IPvisiteur = '.$IPvisiteur ;
     
    				//J'indique le chemin du fichier que je desire manipuler, ainsi que son nom, et je l'introduis dans la variable
    				$fichierIPvisiteurs="/var/www/SiteWeb/compteur/IPvisiteurs.txt";
    				echo ' $fichierIPvisiteurs = ' .$fichierIPvisiteurs;				
     
    					// pour des informations sur l'utilisation de fopen
    					/*
    						'r' 	Ouvre en lecture seule, et place le pointeur de fichier au debut du fichier.
    						'r+' 	Ouvre en lecture et ecriture, et place le pointeur de fichier au debut du fichier.
    						'w' 	Ouvre en ecriture seule ; place le pointeur de fichier au debut du fichier et reduit la taille du fichier a* 0. Si le fichier n'existe pas, on tente de le creer.
    						'w+' 	Ouvre en lecture et ecriture ; place le pointeur de fichier au debut du fichier et reduit la taille du fichier a* 0. Si le fichier n'existe pas, on tente de le creer.
    						'a' 	Ouvre en ecriture seule ; place le pointeur de fichier a* la fin du fichier. Si le fichier n'existe pas, on tente de le creer.
    						'a+' 	Ouvre en lecture et ecriture ; place le pointeur de fichier a* la fin du fichier. Si le fichier n'existe pas, on tente de le creer.
    						'x' 	Cree et ouvre le fichier en ecriture seulement ; place le pointeur de fichier au debut du fichier. Si le fichier existe deja*, fopen() va echouer, en retournant FALSE et en generant une erreur de niveau E_WARNING. Si le fichier n'existe pas, fopen() tente de le creer. Ce mode est l'equivalent des options O_EXCL|O_CREAT pour l'appel systeme open(2) sous-jacent.
    						'x+' 	Cree et ouvre le fichier pour lecture et ecriture; le comportement est le meme que pour 'x'.
    						'c' 	Ouvre le fichier pour ecriture seulement. Si le fichier n'existe pas, il sera cree, s'il existe, il n'est pas tronque (contrairement a* 'w') et l'appel a* la fonction n'echoue pas (comme dans le cas de 'x'). Le pointeur du fichier est positionne au debut. Ce mode peut etre utile pour obtenir un verrou (voyez flock()) avant de tenter de modifier le fichier, utiliser 'w' pourrait tronquer le fichier avant d'obtenir le verrou (vous pouvez toujours tronquer grace Ã* ftruncate()).
    						'c+' 	Ouvre le fichier pour lecture et ecriture, le comportement est le meme que pour le mode 'c'. 
    					*/
     
    				$saut_de_ligne = "\n";
    				$tabulation= "\t";
     
    				//J'indique les informations dans le fichier de details
    				$date = date("d-m-Y");
    				$heure = date("H:i");
     
    				//Ouverture du fichiers dans lequel je vais inserer les details de connection
    				$fichierDetailsIP = "/var/www/SiteWeb/compteur/DetailsIP_pageAccueil.txt";				
    				echo ' $fichierDetailsIP = ' .$fichierDetailsIP;
    				$ouverture_fichierDetailsIP_ecriture =fopen($fichierDetailsIP,"a");				
    					//Si l'ouverture du fichier a echoue
    					if (!$ouverture_fichierDetailsIP_ecriture)
    					{
    						echo " echec d'ouverture du fichier details ";
    					}
    					//Si l'ouverture du fichier a reussi
    					if ($ouverture_fichierDetailsIP_ecriture)
    					{
    						echo " reussite d'ouverture du fichier details ";
    						fwrite($ouverture_fichierDetailsIP_ecriture, $IPvisiteur);
    							fwrite($ouverture_fichierDetailsIP_ecriture, $tabulation);
    						fwrite($ouverture_fichierDetailsIP_ecriture, $date);
    							fwrite($ouverture_fichierDetailsIP_ecriture, $tabulation);
    						fwrite($ouverture_fichierDetailsIP_ecriture, $heure);	
    							fwrite($ouverture_fichierDetailsIP_ecriture, $saut_de_ligne);
    					}					
    				fclose($ouverture_fichierDetailsIP_ecriture);
     
    				//Je compte aussi les acces a la page d'accueil
    				$fichierAccesPageAccueuil = "/var/www/SiteWeb/compteur/nombre_acces_page_accueil.txt";
    				$ouverture_fichierAccesPageAccueuil_lecture_ecriture =fopen($ichierAccesPageAccueuil,"r+");
    					if (!$ouverture_fichierAccesPageAccueuil_lecture_ecriture)
    					{
    						echo " echec d'ouverture du fichier nombre_acces_page_accueil ";
    					}
    					if ($ouverture_fichierAccesPageAccueuil_lecture_ecriture)
    					{
    						echo " reussite d'ouverture du fichier nombre_acces_page_accueil ";
    					$AccesPageAccueil = fgets($ouverture_fichierAccesPageAccueuil_lecture_ecriture);
    					$AccesPageAccueil = $AccesPageAccueil + 1;
    					$ouverture_fichiervideAccesPageAccueuil_ecriture =fopen($ichierAccesPageAccueuil,"w");
    						fwrite($ouverture_fichiervideAccesPageAccueuil_ecriture, $AccesPageAccueil);
    					fclose($ouverture_fichiervideAccesPageAccueuil_ecriture);
    					}
    				fclose($ouverture_fichierAccesPageAccueuil_lecture_ecriture);
     
    				//J'ai besoin que chaque ligne d'adresse IP soit unique
    				//Il m'est necessaire que le fichier d'adresses IP ne contiennent pas de doublons ou plus
    				//Normalement c'est le cas puisque le fichier est vide au debut
    				//Le fichier est rempli par une nouvelle adresse IP lorsqu'elle n'est pas deja presente dedans					
    				//J'associe l'ouverture du fichier a* $ouverture_fichierIPvisiteurs				
    				//J'utilise l'option 'r' pour indiquer quel'ouverture du fichier n'est que dans un objectif de lecture
    				$ouverture_fichierIPvisiteurs_lecture =fopen($fichierIPvisiteurs,"r");
    				if (!$ouverture_fichierIPvisiteurs_lecture)
    				{
    					echo " echec d'ouverture du fichier fichierIPvisiteurs ";
    				}
    				if ($ouverture_fichierIPvisiteurs_lecture)
    				{
    					echo " reussite d'ouverture du fichier fichierIPvisiteurs ";
    				}				
    				//Je cree une variable qui aura pour objectif de comparer et verifier l'adresse IP du visiteur est deja
    				//renseignee dans le fichier des adresses IP ou pas.
    				//Si l'adresse IP n'est pas deja renseignee dans le fichier des adresses IP, c'est un nouveau visiteur
    				//Il faudra donc augmenter le compteur de 1
    				//Je pars du principe que l'adresse IP du visiteur n'est pour le moment pas renseignee dans le fichier 
    				//d'adresses IP
    				$IPdejapresente = 0;
    				//Je lance ensuite l'analyse afin de verifier si l'adresse IP recuperee est bien nouvelle ou non
    					// Si le fichier a pu etre ouvert (logiquement c'est le cas, puisque je l'ai deja cree au prealable dans ce but)
    					if ($ouverture_fichierIPvisiteurs_lecture)
    					{
    						//Tant qu'on est pas arrive a* la fin du fichier
    						while (!feof($ouverture_fichierIPvisiteurs_lecture))
    						{
    							//On lit la ligne courante
    							$lignelue = fgets($ouverture_fichierIPvisiteurs_lecture);
    							//Si la ligne lue possede deja l'adresse IP du visiteur actuel					
    							if ($lignelue == $IPvisiteur)
    							{
    								//Je mets la valeur true a* la variable $IPdejapresente
    								$IPdejapresente = 1;
    							}
    							//A l'inverse, si la ligne lue ne possede pas l'adresse IP du visiteur actuel, on ne fait rien
    							//Et on passe a la ligne suivante en relancant la meme analyse
    						}						
    					}
    				//Fermeture du fichier 
    				fclose ($ouverture_fichierIPvisiteurs_lecture);			
     
    				//Si $IPdejapresente vaut 1 on ne fait rien
    				//Si $IPdejapresente vaut 0, alors il va falloir la rajouter au fichier d'adresses IP, et augmenter 
    				//le compteur de 1				
    				//Je commence par associer a des variables les ouvertures de fichier dont je vais avoir besoin
    				$fichier_CompteurVisites="/var/www/SiteWeb/compteur/compteur_visites.txt";
    				$ouverture_fichierCompteurVisites_lecture = fopen($fichier_CompteurVisites,"r");	
    				$ouverture_fichierCompteurVisites_ecriture = fopen($fichier_CompteurVisites,"w");
    				$ouverture_fichierIPvisiteurs_ecritureIPalafin = fopen($fichierIPvisiteurs,"a+");
    				$nombre_visites = fgets($ouverture_fichierCompteurVisites_lecture);
    				//Si l'adresse IP n'est pas presente dans la liste du fichier d'adresses IP
    				if ($IPdejapresente == 0)
    				{					
    					// ETAPE 1 : Ajout de la nouvelle adresse IP au fichier										
    					// Je saute une ligne apres avoir ouvert le fichier IP visiteurs
    					fwrite($ouverture_fichierIPvisiteurs_ecritureIPalafin, $saut_de_ligne);
    					// J'ajoute la nouvelle adresse Ip au fichier
    					fwrite($ouverture_fichierIPvisiteurs_ecritureIPalafin, $IPvisiteur);					
     
    					// ETAPE 2 : On augmente de 1 le nombre de visites
    					// Je vais me servir du fichier texte compteur_visites.txt (a la base, il possedait la valeur 0 (zero)).					
    					//Le fichier compteur_visites.txt ne comprend qu'une seule ligne, qui contient juste le nombre de visites recencees					
    					$nombre_visites = $nombre_visites + 1 ;
    					//Il faut ensuite mettre a jour le fichier qui contient le nombre de visites					
    					fwrite($ouverture_fichierCompteurVisites_ecriture, $nombre_visites);					
    				}
    				//Affichage du nombre de visites
    					echo $nombre_visites;
    					echo " visites";				
    				//Fermeture des fichier 
    					fclose ($ouverture_fichierCompteurVisites_lecture );
    					fclose ($ouverture_fichierCompteurVisites_ecriture);
    					fclose ($ouverture_fichierIPvisiteurs_ecritureIPalafin);				
    ?>
    Voila.
    Lorsque j'exécute le code PHP, j'obtiens le message d'erreur suivant : "echec d'ouverture du fichier details ".
    Je vois pas trop d’ou ca vient.
    Avez-vous une ou plusieurs idées d'ou vient le problème ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    fopen fourni des erreurs de type warning.
    Assure toi d'avoir tous les types d'erreur PHP afin de mieux voir ce qui se passe.

    tout de même "a" correspond à lecture seule.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci pour cette première réponse.
    Tu me dis que "a" correspond à lecture seule, et pourtant si je regarde sur http://php.net/manual/fr/function.fopen.php, il m'est indiqué dans le tableau que c'est une ouverture en écriture seule, avec le curseur de texte en fin de fichier/ligne.
    Donc je ne comprends pas trop.

    Le message d'erreur n'est pas lié à PHP mais correspond au "echo" de la condition.
    Qu'entends-tu par type d'erreur PHP ?

    Je ne vois pas encore d'où vient mon problème, mais merci pour cette réponse rapide qui m'aide déjà à réfléchir et par conséquent avancer.
    Au fait, le code PHP est positionné sur un poste linux.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    heu oui pardon "a" c'est bien ecriture.

    pour les erreurs, justement il te manque l'erreur fournie par PHP, tu n'as que ton message personnalisé.
    Tu peux ajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error_reporting(E_ALL);
    au début du script

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    lignes 57 et 67 :
    $ichierAccesPageAccueuil au lieu de $fichierAccesPageAccueuil !


    N.B. On écrit "Accueil".

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci pour vos réponses.
    Le problème est résolu.
    Il s'agissait en fait des droits Linux sur les fichiers qui étaient exclusifs à l'utilisateur root. Le rajout des droits a corrigé le problème.
    Vos réponses m'ont permis de réfléchir de manière différente et de m'orienter sur d'autres solutions de résolution.
    L'utilisation de "error_reporting(E_ALL);" en début de code PHP m'a permis de comprendre que le problème ne venait pas directement du code, car je n'avais pas d'erreur PHP qui s'affichaient.
    Les erreurs d'écriture en ligne 57 et 67 m'ont aussi permis de gagner un temps non négligeable.
    En ce qui concerne ma demande initiale le problème est résolu, même si mon compteur ne fonctionne pas encore. Je vais continuer à chercher, même si je ne vois pas encore comment résoudre ce problème.
    Je pense que je gere et comprends mal la commande fgets().

    Merci encore pour vos réponses, c'est vraiment très gentil de votre part.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de compteur de visite en php
    Par bodysplash007 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2007, 22h12
  2. [PHP-JS] probleme compteur live
    Par texas dans le forum Langage
    Réponses: 1
    Dernier message: 29/10/2006, 00h01
  3. [PHP/MySQL]Compteur de visite par mois
    Par kagura dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2006, 16h00
  4. [PHP] Compteur de visite
    Par vins25 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 08/03/2006, 11h52
  5. [Sécurité] compteur de visites en php
    Par stanley dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo