Lecture d'un fichier sur un autre site

Fermé
philmtjn - 2 août 2013 à 00:00
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 1 oct. 2013 à 11:12
Bonjour,

J'ai fait une Class pour les bases de données. Je voudrais pouvoir vérifier en interne que la Class que j'utilise est la dernière que j'ai fait.

mon fichier de donnée de version : http://pmdragon.free.fr/TabloBase_MAJ.txt

et ma Class fait :
$fp=fopen('http://pmdragon.free.fr/TabloBase_MAJ.txt','r');
$fgc=fgets($fp,255);
echo "→".$fgc."← - on devrait avoir : →".$this->getVersion()."←";
if($this->getVersion()==$fgc){
$this->setClassAJour("Class à jour (".$fgc.")");}
else{$this->setClassAJour("Class périmée (".$fgc.")");}


pour faire un essai en dehors de la Class, j'ai fait :
$fp=fopen('http://pmdragon.free.fr/TabloBase_MAJ.txt','r');
$fgc=fgets($fp,255);
echo "→".$fgc."← - on devrait avoir : →4.0040.00380 du 01/08/2013←";

le résultat doit être :
4.0040.00380 du 01/08/2013 - on devrait avoir : 4.0040.00380 du 01/08/2013

avec des flèches de chaque coté des valeurs pour être sûr qu'un blanc ne s'y cache pas :)


qui est extraite d'un site http://monsite2.free.fr/cls/
mais $fgc retourne du vide.
si je met le fichier TabloBase_MAJ.txt sur monsite2
et que je change la première ligne en :
$fp=fopen('/TabloBase_MAJ.txt','r');

là ça marche mais ma vérification ne sert plus a rien :(

Si quelqu'un a une idée qui fonctionne ...


si vous voulez vérifier, le fichier comporte une seule ligne :
4.0040.00380 du 01/08/2013

A voir également:

6 réponses

RobinZS Messages postés 5 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 3 août 2013
3 août 2013 à 12:09
Salut,
Tu peux utiliser simplehtmldom pour parser la page, c'est simple et efficace (d'autant que là c'est juste un text brute)
https://simplehtmldom.sourceforge.io/
J'ai fais comme ça dans un fichier php
<?php
include_once('simple_html_dom.php');
echo file_get_html('http://pmdragon.free.fr/TabloBase_MAJ.txt')->plaintext;
?>
0
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
6 août 2013 à 14:09
et il t'écrit

4.0040.00380 du 01/08/2013

dans ta page ?
moi, c'est "fichier introuvable car je n'ai pas "simple_html_dom.php" sur mon site
0
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
6 août 2013 à 14:19
meme en l'ajoutant j'ai des erreurs.
merci tout de même.
Si vous avez une autre idée...
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 3/08/2013 à 16:04
RobinZS, pourquoi s'embêter à utiliser une librairie , qui plus est prévue pour du HTML, alors qu'on peut le faire avec la librairie standard de PHP?

En rapport direct avec la question: il se peut que la lecture ne marche pas comme il faut depuis un site externe: fopen peut ouvrir des liens d'autres protocoles (que les fichiers locaux) et d'autres sites, mais avec un wrapper HTTP.
Et tu demandes de lire 255 octets depuis l'adresse, or HTTP n'est pas très adapté pour faire des lectures partielles. Du moins certains serveurs le supportent, mais pas d'autres.
Donc vaut mieux simplement tout récupérer dans une variable, et l'utiliser après:
$content = file_get_contents("l'adresse");
Pas de problème ici vu qu'on demande de tout récupérer (une bête requete GET).

En revanche, il faudra adapter le code et se débarrasser du fopen(),et fread().
Si tu veux seulement les 255 premiers caractères (car le fichier serait plus long par ex): $fgc = substr($content, 0, 255);

Parenthèse sur le format du fichier TabloBase_MAJ.txt:
1: Avoir un numéro de version c'est bien, mais ce n'est pas un simple chiffre à virgule: il y a plusieurs points! Donc ajoute un numéro entier représentant cette version, par ex:
- 1 pour la 4.0040.00380
- 2 pour la 4.0040.00381
- 3 pour la 4.0040.00382
Et ainsi de suite. C'est très pratique pour comparer après ( if($this->ver < $ver) { return OUTDATED; } ).
2: Le format de la date: les 'ricains ils ont un format de date comme ceci: "mm/jj/aaaa", or nous c'est "jj/mm/aaaa". Attention donc: je te conseille vivement de mettre cette date sous forme de timestamp, qui lui est un nombre entier (et un timestamp de 0 correspond au 1er janvier 1970 00:00:00 GMT, l'époque UNIX).
3: Les séparateurs ça roxxe. Pour les 3 données (version entière, version, date), sépare-les par un caractère, par exemple ";".
De cette manière un $info = split(";", $content) renverra un array avec:
- $info[0] contenant la version entière
- $info[1] la version
- $info[2] la date (en timestamp)
Il est a noter que toutes ces variables seront des strings, n'oublie pas de les convertir si besoin.
from human import idiocy
del idiocy
0
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
Modifié par philmtjn le 6/08/2013 à 14:27
en fait, je veux récupérer juste une chaine de caracteres du site distant (http://pmdragon.free.fr) et la comparer avec une chaine dans le site courant.
c'est pour savoir si la class que j'utilise dans le site est de la même version que la class sur le site distant.
Il me semble que j'ai essayé avec file_get_contents et que je ne recevais pas la chaine ... mais je ré-essaye et je l'ecrirai ici.
Merci de votre aide, je vous tiens au courant de mes tests

Ma class fait tout le boulot d'auto-vérification.
le constructeur tente d'accèder à son site d'origine (http://pmdragon.free.fr) et regarde ce que contient le fichier à la racine : nom_de_la_class_MAJ.txt
il compare avec la version interne,
et écrit
Class à jour (numéro de version)
ou
Class périmée (numéro de version)
mais comme il ne récupère JAMAIS le fichier... cela donne :
Class périmée()

J'attend vos idées... et je cherche de mon coté...
0
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
16 août 2013 à 23:01
Si quelqu'un a d'autres idées...
0
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
22 août 2013 à 15:26
même si c'est récupérer les 11 premiers caractères ... même si ca s'arrete au premier blanc rencontré... ça me convient.
0
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
20 août 2013 à 09:57
Personne n'aune idée ?
Je n'ai pas trouvé pour l'instant et tout ce que j'essaye ne donne rien.
Je maitrise entierement la Class et s'il faut qu'elle génère un truc sur le site qui est testé c'est faisable.
Ce que je veux faire c'est un auto-controle de la version (au moins le numéro)
Les as d'ici sont peut etre en vacances ...
bonne journée
0
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
18 sept. 2013 à 09:48
Je n'ai toujours pas réussi... si quelqu'un a une idée ... qu'il l'a testé et que ça semble fonctionner... je suis preneur !!!!


0

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

Posez votre question
philmtjn Messages postés 59 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 26 juillet 2017 4
1 oct. 2013 à 10:18
Bonjour a tous ... toujours pas d'idée ??
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
1 oct. 2013 à 11:12
Salut,

gravgun t'as déjà donner une réponse complète qui fonctionne.

Pour récupérer ton fichier en php, le plus simple est de faire :
$content = file_get_contents('http://pmdragon.free.fr/TabloBase_MAJ.txt');

Bonne journée
0