Lecture d'un fichier sur un autre site
philmtjn
-
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
Pitet Messages postés 2826 Date d'inscription Statut Membre Dernière intervention -
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
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:
- Lecture d'un fichier sur un autre site
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Site comme coco - Accueil - Réseaux sociaux
- Site de telechargement - Accueil - Outils
6 réponses
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;
?>
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;
?>
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:
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
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
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é...
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é...
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
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
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 !!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
merci tout de même.
Si vous avez une autre idée...