Donner un nom spécial à un fichier crée en php [Résolu]

Signaler
Messages postés
28
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 mai 2009
-
Messages postés
28
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 mai 2009
-
 Bonjour j'aimerais ouvrir un fichier (le créer s'il n'existe pas) lorsque un visiteur ouvre l'une des pages de mon site web dans le quel des informations sont automatiquement insérées. Pour cela je n'ai pas besoin d'aide le fichier php est déjà crée :P mais ce que j'aimerais faire c'est pouvoir ouvrir un fichier qui porte un nom de fonction php (exemple: $date).
C'est a dire plus concrètement que par exemple si quelqu'un viens le Lundi 01 Janvier 2008 sur mon site, il y ai un fichier qui s'édite avec le nom 01/01/01 (exemple).
Je ne demande pas forcément pour la date mais pour n'importe quelle fonction php.

Voici la partis qui sert à ce que je veux faire dans mon code :

<?
// Fichier
$fichier = 'visites.txt';
// Ouverture du fichier, création si besoin est
$fp = fopen($fichier, 'a+');

// Récupère la date
$date = date('d-m-Y H:i:s');

// Récupère l'IP du visiteur
if(IsSet($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $ip_simple = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(IsSet($_SERVER['HTTP_CLIENT_IP'])){
    $ip_simple = $_SERVER['HTTP_CLIENT_IP'];
}else{
    $ip_simple = $_SERVER['REMOTE_ADDR'];
}

$fsz = filesize($fichier);
fseek($fp,$fsz);

// Enregistre les données
fputs($fp, $date.' | IP: '.$ip_simple."\r\n");

// Ferme le fichier
fclose($fp);

?>

 Voila est-ce que quelqu'un pense pouvoir m'aider en trouvant juste ce qu'il faut modifier dans la première ligne :
$fichier = 'visites.txt';
(ne cherchez pas ailleurs c'est la normalement ^^)
pour que cela fasse l'effet voulu.J'ai essayé une multitude de possibilités comme $fichier '$date.txt'; OU $fichier "$date.'visites.txt'"; OU $fichier = $date.'visites.txt'; ... j'ai essayé avec un ==, avec des ( ) ... je ne vois plus quoi faire

Merci beaucoup à bientôt j'espère.
PS: c'est vraiment rare que je poste sur des forums pour avoir des réponses a mes problèmes mais je me dis que nous sommes mercredi apres-midi et qu'avec de la chance j'aurais peut-etre la réponse d'un connaisseur dans la semaine

Bonne soirée

6 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

Je ne sais pas bien comment se comporte PHP avec les noms de fichiers qui contiennent un espace. Mais je ne serais pas étonné qu'il n'apprécie pas.
Ton format de date contenant un espace, je chercherais de ce côté là.

Ensuite, si tu veux savoir pourquoi :
- $fichier = '$date.txt';
- $fichier = "$date.'visites.txt'";
ne fonctionnent pas, je te recommande de te pencher un peu sur la concaténation de chaines de caractères... On trouve tout ce qu'il faut dans la doc :
- Doc sur les chaines de caractères : http://www.php.net/manual/fr/language.types.string.php
- Les opérateurs de chaines : http://www.php.net/manual/fr/language.operators.string.php

Seule l'assignation $fichier = $date.'visites.txt'; fonctionnera.
Mais comme ta date comporte un espace... Il y a fort à parier que PHP essaye d'ouvrir un fichier qui porte un nom qui correspond à la chaine de caractères AVANT l'espace et pas au-delà.

Note aussi que == n'est pas un opérateur d'assignation, mais de comparaison, ce qui n'est absolument pas la même chose ;)
Messages postés
28
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 mai 2009

Merci beaucoup c'est super j'ai réussi

La réponse est là :
http://www.php.net/manual/fr/language.types.string.php
avec l'exemple que j'ai analysé puis fini par comprendre :







Exemple 11.15. Utilisation des accolades <var>{}</var> dans les chaînes









<?php
$boisson 


= 


'vin'




;
echo 


"Du $boisson, du pain et du fromage !"



;
 



// Correct, car "," n'est pas autorisé dans les noms de variables




echo 


'Il a goûté plusieurs ' 


. 


$boissons



;
 



// Pas correct, car 's' peut faire partie d'un nom de variable, et PHP recherchera alors $boissons




echo 


"Il a goûté plusieurs ${boisson}s"



;
 



// Correct



?>








Je l'ai donc adapté à mon cas pour arriver à cette fonction :
   $date = date('d-m-Y H:i:s')
   $fichier = "${date}.htm";
Ce qui me créé (dans l'exemple d'aujourd'hui) un fichier nommé "18-11-07 22:32:11.htm"

Alors merci beaucoup à vous de m'avoir mis sur la piste  je n'aurais pas réussi sans ^^
Maintenant un nouveau problème se présente à moi... j'ai également cherché une solution avant d'en parler ici biensur.
Le voici :
J'ai le code php suivant (toujours inclue dans une page html et lors de la visite de n'importe qui, un listage automatique de l'IP, le navigateur etc... est créé) pour reprendre l'exemple du début de ce sujet :

<?

   // ON RECUPERE TOUTES LES INFORMATIONS POUR LA SUITE
// Date
$date = date('d-m-Y H:i:s'); // Date &amp; heure complète à afficher dans le fichier
// Prépare le nom de fichier à créer
$jour = strftime('%d'); // %d affiche le jour de 01 à 31
$mois = strftime('%m'); // %m affiche le mois de 1 à 12
$annee = strftime('%y'); // %y affiche l'année sur 2 chiffres
$date_fichier = "$jour-$mois-$annee"; // format du nom porté par le fichier créé

// Récupère l'IP du visiteur
if(IsSet($_SERVER['HTTP_X_FORWARDED_FOR'])){
    $ip_simple = $_SERVER['HTTP_X_FORWARDED_FOR'];
}elseif(IsSet($_SERVER['HTTP_CLIENT_IP'])){
    $ip_simple = $_SERVER['HTTP_CLIENT_IP'];
}else{
    $ip_simple = $_SERVER['REMOTE_ADDR'];
}

   // ON INSCRIS TOUTES LES INFORMATIONS TROUVEE DANS LE FICHIER VOULU
// Fichier
$fichier = "${date_fichier}.htm";
// Ouverture du fichier
$fp = fopen($fichier, 'a+');

$fsz = filesize($fichier);
fseek($fp,$fsz);

// Enregistre les données
fputs($fp, $date.' | IP: '.$ip_simple."\r\n");

// Ferme le fichier
fclose($fp);

?>

-> Il marche parfaitement pas d'inquiétude.
 Ce que j'aimerais faire c'est ne pas créér un fichier par jour contenant l'IP des visiteurs mais plutôt un par semaine. Pour créer un par moi il suffit d'écrire :
   $date_fichier = "$mois$annee";
mais pour les semaines je n'ai que %W (ou %V) mais ce n'est pas ce que je veux puisque cela donne le numéro de la semaine par rapport au début de l'année. Donc il va s'affiche par exemple "52.11-07.htm" tandis que j'aimerais avoir seulement :
   01.11-07.htm pour la première semaine du mois
   02.11-07.htm pour la deuxième semaine du mois
   03.11-07.htm pour la troisième semaine du mois
et   04.11-07.htm pour la quatrième semaine du mois.
Si vous ne comprenez pas ce que je recherche je peux réexpliquer avec d'autres mots :)
Sinon essayez de me dire si vous pensez que c'est réalisable ou pas.

Encore merci et à bientôt. 

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

il faut encoder le nom du fichier via urlencode() s'il y a des espaces. A priori.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Gné ? Pour un fichier sur le système de fichier ? Un simple antislash devant l'espace ne suffirait pas ?
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Je ne sais pas, je ne mets jamais d'espaces ni de majuscules dans mes noms de fichier.
Mais, si tu uploades un fichier puis que tu fais ton move_uploaded_file() et cie dessus...le nom du fichier est encodé (comme tout ce qui passe dans un formulaire).Et perso, je ne fais pas d'urldecode() ou autre sur le nom du fichier que je traite après. Donc ça doit fonctionner.
Messages postés
28
Date d'inscription
mercredi 8 novembre 2006
Statut
Membre
Dernière intervention
15 mai 2009

C'est bon laissez tomber ca ne doit pas être possible à faire la création d'un fichier par semaine mais ca n'est pas grave car enfait la solution quotidiènne m'est favorable

Sujet Terminé ! Encore merci