Executer du php a l'ouverture d'un lien

[Résolu/Fermé]
Signaler
Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017
-
Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017
-
Bonjour a tous

voila un code tout simple pour ouvrir une page
<center><h3><a href=https://www.adresse.com/>Cliquer ici</a></h3></center>


j'ai incorporé dedans du code php pour avoir l'ip du visiteur qui clique sur ce lien
dans un fichier txt
ce qui donne
<center><h3><a href=https://www.adresse.com/
onclick =<?php
$filename = 'acceuil.txt';$somecontent = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ?  $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if (is_writable($filename)) {if (!$handle = fopen($filename, 'a')) { exit;}
$somecontent.= "  Click sur le lien   le ".date('l d/m/Y')." à ".date('H').":".date('i').":".date('s')."";
if (fwrite($handle, $somecontent."\r\n") === FALSE) { exit;} fclose($handle);
} else { echo "<br>Le fichier $filename n'est pas accessible en écriture ou n'existe pas";}
?>
>Cliquer ici</a></h3></center>


le probleme c'est que dés que l'on vient sur la page le code php s'execute alors que
je voudrais qu'il fonctionne que lorsque le visiteur clique sur le lien " Cliquer ici" pour ouvrir le lien "https://www.adresse.com/"

Si quelqu'un a une solution, merci d'avance

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

12 réponses

Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
999
Si tu préfères éviter l'Ajax, tu peux faire aussi comme google et d'autres :
au lieu d'un lien direct
<a href="https://www.adresse.com" rel="nofollow noopener noreferrer" target="_blank" />Cliquer ici</a>
, tu fais un lien géré par ton serveur
<a href="redirect.php?lien=https://www.adresse.com" rel="nofollow noopener noreferrer" target="_blank"/>Cliquer ici</a>

Et tu crées une page redirect.php qui fait tout ce que tu avais prévu, et qui se termine par une redirection vers la page voulue :
<?php
$filename = 'accueil.txt';
$somecontent = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ?  $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];

if (is_writable($filename)) {
   if (!$handle = fopen($filename, 'a')) { exit;}
   $somecontent.= "  Click sur le lien   le ".date('l d/m/Y')." à ".date('H').":".date('i').":".date('s')."";
   if (fwrite($handle, $somecontent."\r\n") === FALSE) { exit;}
   fclose($handle);
   
   header('Location: ' . $_GET['lien']);  
} else {
   echo "<br>Le fichier $filename n'est pas accessible en écriture ou n'existe pas";
}
?>


Xavier

(PS : je n'ai pas de serveur PHP sous la main pour tester, tu auras peut-être besoin de jouer avec des fonctions d'encodage d'URL pour que ça fonctionne correctement. À tester...
https://www.php.net/manual/en/function.urldecode.php
https://www.php.net/manual/en/function.urlencode.php
)
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Très élégante cette solution (+1)
Salut,

Dans le Onclick, tu devrais mettre du javascript, qui irait appeler un script PHP contenant le code que tu présentes ici.

Ici cela n'a aucun sens.

PHP est un script côté serveur, qui permet de fournir une page HTML (je résume hein), donc quand un internaute affiche la page avec le lien, le code que tu montres s'exécute forcément, mais une fois la page affiché, le code PHP ne s'exécutera plus
Messages postés
33476
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 septembre 2021
3 719
Bonjour,

Le résumé de Nessdarth est correcte.

Pour faire ce que tu souhaites, tu vas devoir passer par de l'ajax.

Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017

bonjours, merci pour vos réponses

Je me defend en html et un peu en php, mais pas en javascript.
donc je pensais faire une page avec:
<?php
$filename = 'acceuil.txt';$somecontent = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ?  $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if (is_writable($filename)) {if (!$handle = fopen($filename, 'a')) { exit;}
$somecontent.= "  Click sur le lien   le ".date('l d/m/Y')." à ".date('H').":".date('i').":".date('s')."";
if (fwrite($handle, $somecontent."\r\n") === FALSE) { exit;} fclose($handle);
} else { echo "<br>Le fichier $filename n'est pas accessible en écriture ou n'existe pas";}
?>
<center><h3><a href=https://www.mon lien.com>Cliquer ici</a></h3></center>


Mais voila il faudrait que depuis la page principale en cliquant pour ouvrir ce fichier php on face ouvrir directement le lien, parce que là c'est une autre page qui s'ouvre avec de nouveau un lien a cliquer.
Je n'ai pas eut le temps de trop chercher si c'était possible de le faire , si quelqu"un a une idée?
Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017

j'ai rajouté ce code (ici en gras) dans le fichier "redirect.php"
mais la page qui s'ouvre me dis "La page n’est pas redirigée correctement
Firefox a détecté que le serveur redirige
la demande pour cette adresse d’une manière qui n’aboutira pas.
La cause de ce problème peut être la désactivation ou le refus des cookies."

<?php
$page='http://siteartpeinture.free.fr';
$filename = 'acceuil.txt';$somecontent = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if (is_writable($filename)) {if (!$handle = fopen($filename, 'a')) { exit;}
$somecontent.= " Click sur lien le ".date('l d/m/Y')." à ".date('H').":".date('i').":".date('s')."";
if (fwrite($handle, $somecontent."\r\n") === FALSE) { exit;} fclose($handle);

header('Location: ' . $_GET['$page']);

} else { echo "<br>Le fichier $filename n'est pas accessible en écriture ou n'existe pas";}?>
Tu devrais utiliser le code fourni par Reivax962

Tu as mis quoi au niveau du lien ?

Tu penses vraiment que $_GET['$page'] existe ?

Si tu veux vraiment utiliser la variable $page que tu as ajouté dans ton code,écrit le ainsi dans l'envoi du header:
header('Location: ' . $page); 

Tu devrais lire des tutos sur l'utilisation du $_GET, je ne dis pas cela méchamment, mais il me semble qu'il y a quelques confusions et tu progressera en PHP
Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017

merci Nessdarth

Ce n'est pas méchant de me faire voir les erreurs que j'ai fais, je viens de me mettre a étudier le php et j'en suis qu'aux conditions avec if else.
je ne vais pas manquer de lire des tutos sur l'utilisation du $_GET, je sais les utiliser dans les formulaires et encore tout juste..
J'ai rectifier le code et ça fonctionne trés bien maintenant.
Merci de ton aide, j'aurais fini par trouver peut être, mais il vaut mieux un tiens que dix tu l'aura.
Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017

Il y a un petit probléme? ça fonctionne en local mais pas sur le serveur
et ça viens de

header('Location: ' . $page);

????????????????????????

Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sda/0/c/siteartpeinture/photos_ursula/redirect_lien1.php:2) in /mnt/169/sda/0/c/siteartpeinture/photos_ursula/redirect_lien1.php on line 8
Quand on utilise une redirection, le script PHP ne doit envoyer que le header de redirection et rien d'autre, même pas un espace;
L'erreur semble indiqué que ce n'est pas le cas, la page redirect_lien1.php doit comporter autre chose que les éléments qu'on a te fournir sur ce post.
Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017

bien sur, voila le code du fichier "redirect_lien1.php"

<?php
header('Location:https://www.Archers.com');

$filename = 'acceuil.txt';$somecontent = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
if (is_writable($filename)) {if (!$handle = fopen($filename, 'a')) { exit;}
$somecontent.= " Click sur le lien Les Archers le ".date('l d/m/Y')." à ".date('H').":".date('i').":".date('s')."";
if (fwrite($handle, $somecontent."\r\n") === FALSE) { exit;} fclose($handle);
}
else { echo "<br>Le fichier $filename n'est pas accessible en écriture ou n'existe pas";}?>


le but de la maneuvre c'est d'incrire l'adresse ip du visiteur dans le fichier
"acceuil.txt" quand il clique sur le lien
<a href="redirect_lien1.php" rel="nofollow noopener noreferrer" target="_blank">Les Archers</a>

qui se trouve sur la page principale
En local ça fonctionne trés bien
Sur le serveur du site non et un message d'erreur s'affiche.

j'ai essayé en ne laissant que ce code
<?php
header('Location:https://www.Les-Archers.com);
?>

et là ça fonctionne mais ça me sert a quoi de faire tout ce trafic si l'adresse ip du visiteur ne s'inscrit pas dans le fichier.
pour ouvrir ma page un simple lien suffit!

pourquoi tout fonctionne t'il bien en local et pas sur le serveur de mon site?

encore un casse tête chinois!
Je me demande du coup si tu ne rentres pas dans le cas où il y a une erreur et dans ce cas, tu envoies à la fois un header de redirection et le message "Le fichier acceuil.txt n'est pas ..."

et là évidemment tu ne peux pas faire de redirection.

En local tu as les droits d'écriture, mais est ce la cas sur le serveur?

vérifie que le fichier à le chmod égale à 777

Fais toi un script php qui aura pour but d'écrire dans un fichier, tu vérifieras au moins cette possibilité et comment y parvenir.

Tu utilises un outil fourni par ton hébergeur pour déposer tes fichiers sur ton espace ou un client FTP, à partir de d'un client ftp, il est facile de modifier le chmod d'un fichier, avec les outils internes des hébergeurs, je l'ignore, mais ça serait un comble que cela ne soit pas possible.

Bon courage, n'hésite pas si tu as des questions
Messages postés
39
Date d'inscription
dimanche 29 mai 2016
Statut
Membre
Dernière intervention
16 mai 2017

Toutes les pages de mon site ont ce code php, et ça fonctionne trés bien,
c'est mieux qu'un compteur de clicks.
je sais qu'elles images ont été vues et même téléchargées, n'importe quelle action qui est faite sur le site s'inscrit dans le fichier txt qui est sur le serveur, et avec un simple lien je le consulte.
avec l'ip du visiteur je vais sur "http://www.netscop.net/localiser-une-adresse-ip.html" et je sais d’où vient ce visiteur

extrait du txt

52.90.248.135 Acceuil.txt le Tuesday 25/10/2016 à 23:43:48 Ashburn, United States ec2-52-90-248-135.compute-1.amazonaws.com BANNI

89.145.95.68 Acceuil.txt le Tuesday 25/10/2016 à 23:47:59 United Kingdom Londre angleterre centro-68.grapeshot.co.uk

64.20.243.132 Acceuil.txt le Wednesday 26/10/2016 à 16:36:50 Ville: Austin, United States net64-20-243-132.static-customer.corenap.com

78.46.21.97 Acceuil.txt le Sunday 13/11/2016 à 13:28:26 ville: Cassel
Pays: Germany mail.windrose.od.ua

78.46.21.97 Acceuil.txt le Sunday 13/11/2016 à 13:28:28
78.46.21.97 Peintures paysages le Sunday 13/11/2016 à 13:28:29
78.46.21.97 PeintPaysage PlageArres(3) le Sunday 13/11/2016à13:28:56
78.46.21.97 Click vidéo LevédeSoleil le Sunday 13/11/2016 à 13:28:50
78.46.21.97 Rando2016 Photo_(29) le Sunday 13/11/2016 à 13:29:12

90.113.116.152 Click sur le lien facebook thierry le Tuesday 22/11/2016 à 09:13:26


tu peut constater que le click sur un lien fonctionne sur la dernière ip 90.113.116.152 , mais voila la page elle ne s'ouvre pas(sauf en local ou ça fonctionne trés bien) et un message d'erreur me dit que l'adresse est mal défini

j'ai même grâce a ça détecté une ip frauduleuse, celle ou est inscrit BANNI.
que j'ai bloquée avec un fichier ".htaccess".
Il ne me manque plus donc que les clicks sur les liens, qui ouvre la page et inscrit en même temps l'info sur le fichier txt du serveur,ce qui fait l'objet de cette discution.
Je continu à chercher, merci de tes bons conseils Nessdarth .
Bonnes fêtes de fin d'année