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

PHP & Base de données Discussion :

Regler l'ecart d'heure de mon serveur


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 99
    Par défaut Regler l'ecart d'heure de mon serveur
    Bonsoir je voudrais savoir comment puis-je faire pour régler l’écart de 2 heure entre mon hébergeur et mes visiteur.
    Y a t'il un moyen de le faire pour tous les script qui seront installer sur mon serveur?
    Si non j'utilise un compteur de visiteur qui, a partir de 22heure m'affiche 0 visite or mes visiteur son en GMT et lui En GMT+2.
    je vous envoi le code du compteur au cas ou quelqu'un pourra m'aider a modifier quelque code pour que l'heure soit conforme.
    voici le code de mon compteur.

    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
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    <?php
    /***********************************
    * Récupération de la configuration *
    ***********************************/
     
    // Chemin absolu
    if ( !defined('ABSPATH') )
    	define('ABSPATH', dirname(__FILE__) . '/');
     
    // Existence du fichier config.inc.php
    if (!file_exists(ABSPATH . 'config.inc.php'))
    {
    	echo '<strong>Le fichier config.inc.php manque à l\'appel !</strong>';
    	exit();
    }
    else
    {
    	require_once(ABSPATH . 'config.inc.php');
     
    	// Connexion BDD
    	$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    	if (!$dbc)
    	{
    		trigger_error('Connexion à la BDD impossible : ' . mysqli_connect_error() );
    		exit();
    	}
     
    	// Récupération des données témoins
    	$qry = "SELECT	DATE_FORMAT(c_lastvisit, '%Y-%m-%d') AS c_lastvisit,
    					c_total
    			FROM $db_table
    			WHERE c_iphost = 'temoin'";
    	$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    	$data = mysqli_fetch_array($res, MYSQLI_ASSOC);
     
    	// Nombre de visites total
    	$total = $data['c_total'];
     
    	// Dernier jour traité
    	$saved_date = $data['c_lastvisit'];
     
    	// Aujourd'hui et maintenant
    	$today = date('Y-m-d');
    	$now = time();
     
    	// Si changement de jour
    	if ( ($today != $saved_date) )
    	{
    		// Le nombre de visites de chaque visiteur de la base est remis à 0
    		$qry = "UPDATE $db_table SET c_total = 0 WHERE c_iphost != 'temoin'";
    		$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
     
    		// La date stockée est mise à jour à la date d'aujourd'hui
    		$qry = "UPDATE $db_table SET c_lastvisit = CURDATE() WHERE c_iphost = 'temoin'";
    		$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
     
    		// On vide les lignes obsolètes
    		$exceed = $now - ($keep*60*60);
    		$qry = "DELETE FROM $db_table WHERE c_iphost != 'temoin' AND UNIX_TIMESTAMP(c_lastvisit) < $exceed";
    		$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    	}
     
     
    	/**********************************
    	* Fonction de vérification des IP *
    	**********************************/
     
    	// Fonction qui vérifie si l'IP est exclue du comptage ou pas
    	function ipcheck($ip_to_match, $ip_array)
    	{
    		if (is_array($ip_array))
    		{
    			foreach ($ip_array as $ip)
    			{
    				if (strpos($ip_to_match, $ip)===0)
    				return true;
    			}
    		}
    		return false;
    	}
     
     
    	/*************************
    	* Traitement des visites *
    	*************************/
     
    	$ip = $_SERVER['REMOTE_ADDR'];
     
    	// Si l'IP n'est pas dans la liste de celles à exclure
    	if ( ipcheck($ip, $exclude) != true)
    	{
    		// On compte le nombre d'entrées correspondant à l'IP de notre visiteur
    		$res = @mysqli_query($dbc,"SELECT COUNT(*) FROM $db_table WHERE c_ip = '$ip'") or die(mysqli_error($dbc));
    		$row = mysqli_fetch_row($res);
    		$match = $row[0];
     
    		// Si aucune IP ne correspond, le visiteur est nouveau dans la base de données
    		if ($match == 0)
    		{
    			$iphost = gethostbyaddr($ip);
    			// Alors on ajoute son heure de connexion, son IP, et on initialise son nombre de visites à 1
    			$qry = "INSERT INTO $db_table (c_firstvisit, c_lastvisit, c_total, c_ip, c_iphost) VALUES (NOW(), NOW(), 1, '$ip', '$iphost')";
    			$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    			// Et on incrémente le nombre de visiteurs
    			$qry = "UPDATE $db_table SET c_total = c_total+1 WHERE c_iphost = 'temoin'";
    			$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    		}
    		/*
    		Si il est déjà dans la base, alors :
    		- soit la période est dépassée, alors le visiteur est considéré comme nouveau
    		- soit il est déjà venu dans la même période d'unicité d'un visiteur
    		*/
    		else
    		{
    			// On récupère toutes les données qui lui correspondent
    			$qry = "SELECT UNIX_TIMESTAMP(c_firstvisit) AS c_firstvisit FROM $db_table WHERE c_ip = '$ip'";
    			$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    			$data = mysqli_fetch_array($res, MYSQLI_ASSOC);
     
    			// On récupère la date de ses première et dernière visites
    			$firstvisit = $data['c_firstvisit'];
     
    			// Si la période est dépassée
    			if ( ($now - $firstvisit) > ($unique*60*60) )
    			{
    				// Incrémentation du compteur total
    				$qry = "UPDATE $db_table SET c_total = c_total+1 WHERE c_iphost = 'temoin'";
    				$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    				// On compte le visiteur comme nouveau, même si c'est dans la même journée
    				$qry = "UPDATE $db_table SET c_firstvisit = NOW(), c_lastvisit = NOW(), c_total = c_total+1 WHERE c_ip = '$ip'";
    				$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    			}
    			// Sinon on est dans la même période d'unicité
    			else
    			{
    				// On met uniquement à jour l'heure de son dernier passage
    				$qry = "UPDATE $db_table SET c_lastvisit = NOW() WHERE c_ip = '$ip'";
    				$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    			}
    		}
    	}
     
     
    	/***********************
    	* Stockage des données *
    	***********************/
     
    	// Nombre de visites total
    	$qry = "SELECT c_total FROM $db_table WHERE c_iphost = 'temoin'";
    	$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    	$alltime = mysqli_fetch_array($res, MYSQLI_ASSOC);
    		$c_alltime = $alltime['c_total'];
     
    	// Nombres de visiteurs quotidiens
    	$qry = "SELECT SUM(c_total) AS c_total FROM $db_table WHERE c_iphost != 'temoin'";
    	$res = @mysqli_query($dbc,$qry) or die(mysqli_error($dbc));
    	$today = mysqli_fetch_array($res, MYSQLI_ASSOC);
    		$c_today = $today['c_total'];
     
    	// Nombre de visiteurs en ligne
    	$lastmin = $now - ($interval*60);
    	$res = @mysqli_query($dbc,"SELECT COUNT(*) FROM $db_table WHERE (c_iphost != 'temoin') AND (UNIX_TIMESTAMP(c_lastvisit) >= $lastmin)") or die(mysqli_error($dbc));
    	$row = mysqli_fetch_row($res);
    		$c_online = $row[0];
     
    	// On ferme la connexion à la base de données
    	mysqli_free_result($res);
    	mysqli_close($dbc);
    }
    ?>

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Bonsoir je voudrais savoir comment puis-je faire pour régler l’écart de 2 heure entre mon hébergeur et mes visiteur.
    La 1ère question qui me viens à l'esprit, c'est comment sais tu (à l'avance) qu'il y a 2 heures de décalage entre l'heure de référence de ton serveur (l'hébergeur) et ceux de tes internautes ?

    Théoriquement tes internautes peuvent se situer au 4 coins de cette planète : Aux US, en France, en Asie, etc ... donc avec des décalages horaires très différents.
    Ceci peut être très compliqué à gérer, du moins j'imagine.

    De plus, et quand je regarde ton code, les opérations qui sont faites, je ne vois rien qui serait lié aux internautes, rien en rapport à leur fuseau horaire.


    Théoriquement, une page visitée c'est avant tout un contenu (un document) qui est demandé sur ton serveur, donc (théoriquement toujours) l'heure de référence serait bien plus liée au serveur que ceux des internautes.


    A coté de ça, admettons que tu veuille malgré tout changer l'heure de référence de ton serveur en rajoutant 2 heures de plus, ça peu se faire.
    (Attention, au cas où, en France il y a tantôt 2 heures tantôt 3 heures selon l'été et l'hivers.)

    Le 1er point à noter que Php et MySQL sont indépendant à ce niveau, donc il faudrait le définir des 2 cotés pour les synchroniser.
    En Php ceci peu se définir de plusieurs manières, à la base c'est dans le php.ini : date.timezone
    Par défaut c'est généralement UTC, 0 heure de décalage (c'est peut être pour ça que tu remarques ces 2 heures de décalages).
    Dans le php.ini pour exemple -> date.timezone = UTC

    Coté MySQL il faut lancer une requête (à faire sur l'ensemble du site) pour modifier le time_zone avec le nombre d'heures de décalage qu'il y a avec l'heure du serveur.
    La requête SQL : (si par défaut l'heure de référence est UTC)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SET @@time_zone = '+02:00'


    Tout cela sauf erreur.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 99
    Par défaut
    Le decalage de 2 heures, je le sais parce je suis au Burkina Faso et mon hebergeur est en France. pour mes internautes, 99% sont au burkina car c'est pas un site qui s'adresse au monde entier. Apparemment avec mon hebergeur je peut pas modifier le fichier php ini il me par de serveur mutualisé et il me dis que ca affectera tous les autres clients. Mais es que en changeant ca dans mysql seulement es ce possible que mon compteur et mes article prenne le temp UTC. Pour mes articles et tous le contenu j'utilise SPIP et la aussi je suis obligé de cacher l'heure de publication de mes articles a cause du decalage.
    Merci a vous qui avez pensez a me repondre.

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Faudrait approfondir la question car théoriquement le date.timezone peut être modifié/adapté de plusieurs manières, donc pas seulement au niveau du php.ini

    On peu définir ça aussi dans un fichier .htaccess, de même en Php avec la fonction ini_set().

    Exemple en Php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('date.timezone', 'Europe/London');
    Donc même en mutualisé tu dois avoir moyen de le faire.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 99
    Par défaut
    Ok je vais donc approfondir ma question auprès de mon hébergeur qui est (e-clicking.com) mais en attendant je vais faire la solution sql en local pour voir si sa vas affecter mes articles. Merci à vous je reviens vous mettre au courant de la suite d'ici là.

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Au passage, fais un phpinfo() dans une page pour savoir quel est le fuseau horaire par défaut.
    Ou juste faire un ini_get() sur date.timezone

    Comme je l'ai précisé, par défaut aussi bien Php et MySQL devrait être synchro, donc utiliser le même.
    Là encore, par défaut c'est l'UTC.
    Mais ceci reste à confirmer de ton coté.

    Malgré tout il est possible d'en savoir plus coté MySQL, suffit de lancer la requête suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @@global.time_zone AS global_tz, @@session.time_zone AS session_tz
    Il peut avoir plusieurs types de valeurs.
    Comme (théoriquement) c'est l'heure du système, les 2 valeurs devraient retourner : SYSTEM

  7. #7
    Membre confirmé
    Inscrit en
    Août 2010
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 99
    Par défaut
    Bonsoir mon hebergeur me conseil le fichier htaccess
    Mais comme je n'y connai rien si possible de me donner le code entier a copier dans une fichier htaccess de spip qui existe déjà dna smon repertoire avec ce code
    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
    ##############################################################
    # Fichier .htaccess                               SPIP v 2.0 #
    #                                                            #
    # Permet de controler les URLs et la version de php utilisee #
    # Compatible avec les URLs 'html', 'propres' et 'propres2'   #
    # Permet aussi d'effectuer la transition de .PHP 3 vers .PHP #
    #                                                            #
    # Pour utiliser ce fichier renommez-le '.htaccess' dans le   #
    # repertoire racine du site, en veillant a ne pas ecraser un #
    # .htaccess personnalise qui s'y trouverait deja             #
    #                                                            #
    # Attention certains hebergeurs desactivent tout ou partie   #
    # des fonctions du fichier .htaccess ; celui-ci est donc     #
    # indicatif - en cas de difficulte voir sur les forums SPIP  #
    ##############################################################
     
    RewriteEngine On
     
    ################ CONFIGURATION ######################
     
    ### Configuration sous-repertoire
    # Chez la plupart des hebergeurs il faut indiquer "RewriteBase /"
    # sinon modifiez cette ligne
     
    RewriteBase /
     
     
    # SPIP version 'php' - si vous avez d'anciennes adresses en '.php[3]',
    # supprimez le '#' sur les lignes qui suivent pour rediriger les acces
    # errones vers le .php correspondant
     
    #RewriteCond %{REQUEST_FILENAME} -f
    #RewriteRule ^(.+)\.php[3]$ $1.php [QSA,L]
     
    # Fin version
    ###
     
     
    ################ REGLAGES PERSONNALISES ######################
    # Inscrivez ci-dessous vos reglages supplementaires
     
     
     
     
    ################ GESTIONS DES URLS SPIP #######################
     
    # Deux pseudo-actions a present evacuees
    # N'y at-il pas moyen de REMPLACER un nom dans la QueryString ?
    RewriteCond %{QUERY_STRING} action=rss
    RewriteRule spip.php	spip.php?page=rss [QSA,L]
    RewriteCond %{QUERY_STRING} action=ical
    RewriteRule spip.php	spip.php?page=ical_prive [QSA,L]
     
    ###
    # Si le fichier ou repertoire demande existe
    # ignorer toutes les regles qui suivent
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule "." - [skip=100]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule "." - [skip=100]
    #
    ###
     
     
    ###
    # Compatibilite avec les URLS "html" (pour transition sympa)
    # voir fichier ecrire/urls/html.php
    RewriteRule ^rubrique([0-9]+)(\.html)?$	spip.php?page=rubrique&id_rubrique=$1 [QSA,L]
    RewriteRule ^article([0-9]+)(\.html)?$	spip.php?page=article&id_article=$1 [QSA,L]
    RewriteRule ^breve([0-9]+)(\.html)?$	spip.php?page=breve&id_breve=$1 [QSA,L]
    RewriteRule ^mot([0-9]+)(\.html)?$		spip.php?page=mot&id_mot=$1 [QSA,L]
    RewriteRule ^auteur([0-9]+)(\.html)?$	spip.php?page=auteur&id_auteur=$1 [QSA,L]
    RewriteRule ^site([0-9]+)(\.html)?$	spip.php?page=site&id_syndic=$1 [QSA,L]
    # Compatibilite avec les anciennes URLS appelant directement des fichiers php
    RewriteRule ^(rubrique|article|breve|mot|auteur|site|agenda|backend|backend-breves|distrib|forum|ical|plan|recherche|sommaire|sommaire_texte)\.php3?$	spip.php?page=$1 [QSA,L]
    RewriteRule ^resume.php[3]?	spip.php?page=sommaire [QSA,L]
    RewriteRule ^page.php[3]?	spip.php [QSA,L]
    RewriteRule ^spip_cal\.php3?$	spip.php?page=ical_prive [QSA,L]
    RewriteRule ^spip_rss\.php3?$	spip.php?page=rss [QSA,L]
     
     
    # Fin compatibilite
    ###
     
    ###
    # ping http://site/1234 => article1234
     
    RewriteRule ^([1-9][0-9]*)$     spip.php?action=redirect&type=article&status=301&id=$1 [QSA,L]
     
    #
    ###
     
     
    ###
    # URLs "propres", "propres2", "libres", "arbo"
     
    RewriteRule ^[^\.]+(\.html)?$		spip.php [QSA,E=url_propre:$0,L]
     
    # Fin URLs "propres" et "propres2"
    ###
     
    ###
    # Divers
     
    # bloquer les acces aux repertoires .svn/ (SPIP, plugins, squelettes...)
    RewriteRule ^(.*/)?\.svn/ - [F]
     
    ###
    # Fichiers "standards" (si absents de la racine)
    #
    RewriteRule ^robots[.]txt$      spip.php?page=robots.txt [QSA,L]
    RewriteRule ^favicon[.]ico$      spip.php?page=favicon.ico [QSA,L]
    RewriteRule ^sitemap[.]xml$      spip.php?page=sitemap.xml [QSA,L]
    ##
     
    # expirer les images (pour contourner gros bug MSIE sur le cache)
    # note : a decommenter si vous voulez tester
    #<IfModule mod_expires.c>
    # ExpiresActive on
    # ExpiresByType image/gif A3600
    # ExpiresByType image/jpeg A3600
    # ExpiresByType image/png A3600
    #</IfModule>
     
    #################################
    # gestion des erreurs 404
    # voir http://www.spip.net/fr_article3226.html
    # Pour que le serveur http renvoie les erreurs 404 vers SPIP, supprimer le '#'
     
    # ErrorDocument 404 /spip.php?page=404
     
    #
    ###
    Merci

Discussions similaires

  1. [PC Serveur] Mon serveur HP émet assez de bruit au démarrage et perd l'heure
    Par Zizoua dans le forum Ordinateurs
    Réponses: 7
    Dernier message: 17/04/2015, 19h39
  2. L'heure de mon serveur qui change automatiquement
    Par sleeg dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 05/10/2011, 09h52
  3. Regler heure locale du serveur
    Par sirbaldur dans le forum Langage
    Réponses: 1
    Dernier message: 06/02/2006, 16h36
  4. Paramétrer le nombre de connexion sur mon serveur Mysql
    Par Zerga dans le forum Installation
    Réponses: 2
    Dernier message: 12/12/2003, 19h21
  5. Heur et date serveur sql
    Par adgabd dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/12/2003, 16h16

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