[RESOLU] compteur de clic

Eléphanteau du PHP | 19 Messages

10 janv. 2024, 13:28

Bonjour
pour un coup de main , j'ai un compteur de téléchargement qui fonctionne sous php 4 chez fri point fr ,
lorsque je passe sous php 5 depuis .htaccess , une page blanche s'affiche quand je veut télécharger le fichier et plus rien pas de message d'erreur ,rien.
voici le fichier

Code : Tout sélectionner

<?php error_reporting(E_ALL ^ E_NOTICE); $fichier=str_replace ("/", "_", "$url"); // remplacement des caractères spéciaux dans les noms de fichiers $fichier="telechargements/".$fichier.".txt"; // ouvrir le fichier texte pour chaque telechargement if(!file_exists("telechargements")) // ouvrir le fichier nommé telechargements {mkdir("data",0755);} // chmoder le fichier ( permettre l'ecriture sur ceux-ci ) if(!file_exists("$fichier")){ // si le fichier existe $fp=fopen("$fichier","w"); // écriture sur le fichier fputs($fp,"0"); fclose($fp);} $fp=fopen("$fichier","r+"); $nb=fgets($fp,10); $nb++; fseek($fp,0); fputs($fp,$nb); fclose($fp); Header("Location:$url"); ?>
Merci d'avance :) pour votre aide.

ynx
Mammouth du PHP | 586 Messages

11 janv. 2024, 12:06

Bonjour,

La variable $url n'est pas définie dans ton script.
Quelle est l'adresse saisie dans le navigateur pour charger cette page ? Tu as un paramètre url dans cette adresse (https://monsite.fr/script.php?url=nom_du_fichier) ?
Si oui, tu avais peut-être l'option php register global qui rendait ce paramètre accessible via la variable $url dans ton script.
L'option a été désactivée par défaut dans PHP car c'est une mauvaise pratique, utilise $_GET['url'] à la place de $url dans ce cas.

Le commentaire "// si le fichier existe" indique l'inverse de la condition puisque tu utilises l'opérateur de négation "!" :
if (file_exists("$fichier")) { // si le fichier existe
if (!file_exists("$fichier")) { // si le fichier n'existe pas

Eléphanteau du PHP | 19 Messages

11 janv. 2024, 13:11

Bonjour ynx
merci pour cette réponse rapide , j'ai modifier comme tu m'as dit mais toujours une page blanche lors du clic sur un fichier à télécharger
voici le code modifié

Code : Tout sélectionner

<?php error_reporting(E_ALL ^ E_NOTICE); $fichier=str_replace ("/", "_", $_GET['url']); // remplacement des caractères spéciaux dans les noms de fichiers $fichier="telechargements/".$fichier.".txt"; // ouvrir le fichier texte pour chaque telechargement if(!file_exists("telechargements")) // ouvrir le fichier nommé telechargements {mkdir("data",0755);} // chmoder le fichier ( permettre l'ecriture sur ceux-ci ) if(!file_exists("$fichier")){ // si le fichier existe if (!file_exists("$fichier")) { // si le fichier n'existe pas $fp=fopen("$fichier","w"); // écriture sur le fichier fputs($fp,"0"); fclose($fp);} $fp=fopen("$fichier","r+"); $nb=fgets($fp,10); $nb++; fseek($fp,0); fputs($fp,$nb); fclose($fp); Header("Location:$url"); } ?>
merci :)

ynx
Mammouth du PHP | 586 Messages

11 janv. 2024, 14:03

Mon extrait de code était juste là pour te montrer la différence entre les deux conditions (avec et sans "!"), il ne faut pas copier ces deux lignes.

Essaye comme ceci :
<?php
error_reporting(E_ALL);
ini_set('display_errors', true);

$url = !empty($_GET['url']) ? $_GET['url'] : '';

$fichier = str_replace("/", "_", $url); 
$fichier = "telechargements/" . $fichier . ".txt";

if (!file_exists("telechargements")) {
	mkdir("telechargements", 0755);
}

if (!file_exists($fichier)) {
	file_put_contents($fichier, '0');
}

$count = file_get_contents($fichier);
file_put_contents($fichier, $count++);

header("Location: $url");
exit();

Eléphanteau du PHP | 19 Messages

11 janv. 2024, 14:58

Bonjour , ynx
merci pour le code cela fonctionne nickel ! :)
je vais pouvoir passer en php 5 enfin.
un grand merci
j'ai crier trop vite , le compteur ne s'incrémente pas , il reste à 0 aurait tu la possibilité de regarder ceci ?
merci

Eléphanteau du PHP | 19 Messages

11 janv. 2024, 15:26

De nouveau moi , voici le code fonctionnel ( sur un autre forum openclassrooms )

Code : Tout sélectionner

<?php error_reporting(E_ALL ^ E_NOTICE); $url = $_GET['url']; // Si tu récupère les paramètres sur le GET URL $fichier = str_replace("/", "_", $url); $fichier = "telechargements/" . $fichier . ".txt"; if (!file_exists("telechargements")) { mkdir("telechargements", 0755, true); // Création récursive du répertoire si absent } if (!file_exists($fichier)) { $fp = fopen($fichier, "w"); fputs($fp, "0"); fclose($fp); } $fp = fopen($fichier, "r+"); $nb = fgets($fp, 10); $nb++; fseek($fp, 0); fputs($fp, $nb); fclose($fp); header("Location: $url"); ?>
Grand merci à ynx =D>