Problème PHP
Résoluavion-f16 Messages postés 19252 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Jusqu'à présent, et depuis 7 ans, ce code fonctionnait et me retournait le nombre de visiteurs.
Hors depuis que je suis passée au PHP 8.0, cela fonctionne toujours mais avec ces lignes :
Warning: Undefined array key "#HTTP_REFERER#" in/homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.phpon line174
Warning: Undefined array key "#HTTP_HOST#" in/homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.phpon line175
Voici les lignes en question et je pense que la variable est vide :
$site_referant = $_SERVER['#HTTP_REFERER#'];
$monsite = '#' . $_SERVER['#HTTP_HOST#'];
if (preg_match($monsite,$site_referant))
{
$site_referant = "";}
Merci de m'aider à trouver une solution
- Problème PHP
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
5 réponses
Bonjour,
J'ai appris le PHP il y a plus de 15 ans et je n'ai jamais vu cette notation pour les variables $_SERVER, avec des dièses autour des clés HTTP_REFERER ou HTTP_HOST.
Peut-être que cela fonctionnait sur un serveur spécifique dans un fonctionnement non-standard mais alors c'est un choix fait par l'administrateur du serveur, ce n'est pas la façon "standard" de nommer ces variables.
Tu peux accéder aux valeurs avec $_SERVER['HTTP_REFERER'] au lieu de $_SERVER['#HTTP_REFERER#'] et idem pour HTTP_HOST.
Voir ici pour plus d'infos : https://www.php.net/manual/fr/reserved.variables.server.php
Bonjour,
Merci beaucoup : Il semble que grâce à vos explications à tous deux, le problème soit résolu.
Si, j'ai de nouveau des ennuis, je ne manquerai pas de vous le signaler.
Cordialement
Bonjour,
Nouveau problème depuis que j'ai ôté les dièses :
Warning: Undefined array key "HTTP_REFERER" in /homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.php on line 174
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in /homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-
code-snippet/stats_passages.php on line 176
La ligne 175 s'en est trouvée améliorée
Merci
Avec la fonction isset : https://www.php.net/manual/en/function.isset.php
isset permet de s'assurer que la clé existe avant de continuer et donc éviter l'erreur "Undefined array key".
Mais la fonction empty() est peut-être préférable si tu souhaites aussi t'assurer que la valeur est non-vide.
Voilà ce que j'ai fait mais bon.
La valeur n'est pas vide puisque ma BDD enregistre
Merci
$site_referent = $_SERVER['HTTP_REFERER'];
if(isset($site_referent)){
echo "valeur déclarée";}
else {
echo "valeur nulle";}
$site_referent = $_SERVER['HTTP_REFERER'];
$monsite = 'http://' . $_SERVER['HTTP_HOST'];
if (preg_match($monsite,$site_referent))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionMerci beaucoup cela fonctionne.
L'erreur referer est partie, je vais faire maintenant l'undefined key HOST
Bonsoir,
Mes deux "undefined key" sont réglées.
Me reste ceci à la ligne 179
$monsite = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''; if (preg_match($monsite,$site_referant)) { $site_referant = "";}
Warning: preg_match(): Delimiter must not be alphanumeric or backslash in
/homepages/8/d560574319/htdocs/clickandbuilds/test/wp-content/plugins/insert-php-code-snippet/stats_passages.php on line 179 (la ligne de l'ouverture de la parenthèse du preg_match)
voilà ce que j'avais pour $monsite
$monsite = 'http://' . $_SERVER['HTTP_HOST'];
Bonjour,
La premier argument de la fonction preg_match ne peut pas être simplement ton domaine, il faut inclure des délimiteurs comme « # » ou « / ». C'est exactement ce que l'erreur te dit.
Là encore, rien de neuf depuis des années, c'était déjà une erreur de faire ce que tu fais avec les anciennes versions de PHP.
Voir ici pour des exemples : https://www.php.net/manual/fr/function.preg-match.php
Afin de vérifier si une chaine ($site_refereant) en contient une autre ($monsite), on utilise généralement strpos() qui retourne la position si la chaine est trouvée, ou false sinon.
https://www.php.net/manual/en/function.strpos.php
Depuis PHP 8.0, il y a aussi https://www.php.net/manual/en/function.str-contains.php