Executer du php a l'ouverture d'un lien

Résolu/Fermé
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017 - Modifié par baladur13 le 14/12/2016 à 15:37
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017 - 17 déc. 2016 à 13:13
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

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 déc. 2016 à 10:55
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
Très élégante cette solution (+1)
0
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
0
jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
14 déc. 2016 à 17:54
Bonjour,

Le résumé de Nessdarth est correcte.

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

0
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017
Modifié par baladur13 le 15/12/2016 à 09:49
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?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017
15 déc. 2016 à 21:47
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";}?>
0
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
0
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017
15 déc. 2016 à 22:24
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.
0
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017
15 déc. 2016 à 23:50
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
0
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.
0
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017
16 déc. 2016 à 19:54
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!
0
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
0
sunev Messages postés 39 Date d'inscription dimanche 29 mai 2016 Statut Membre Dernière intervention 16 mai 2017
17 déc. 2016 à 13:13
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
0