Re: Lecture d'un fichier texte sur serveur
Publié : jeu. 22/août/2013 11:13
Longue comme le bras c'est vrai
. MetalOS est sous un environnement Mac OS et ne souhaite pas télécharger le fichier distant. Juste le lire en mémoire.

Forums PureBasic - Français
http://forums.purebasic.com/french/
http://support.microsoft.com/kb/208427/frSi vous utilisez la méthode GET, vous êtes limité à 2 048 caractères moins le nombre de caractères figurant dans le chemin d'accès réel.
Parfois le résultat est nul. A mon avis tu dois prévoir dans ce cas à une nouvelle lecture.
Code : Tout sélectionner
ReceiveHTTPFile()
que dalle ! si tu erases le fichier juste après l'avoir lu , en même pas quelque millième de seconde , ton fichier téléchargé disparait !GallyHC a écrit :En fait il ne veut pas être obliger de devoir copié physiquement les données sur le disque dur (Ce que je comprend car cela laisse une trace).
oui , dans mon message , je parle des 2 modes ! (par url , et Http )Après il ne faut pas confondre le Get (URL) et les datas de réception.
Cordialement,
GallyHC
Code : Tout sélectionner
<?php
if ($_SERVER['HTTP_USER_AGENT'] != 'TonUserAgent')
{
echo "forbidden";
exit();
}
?>
C'est pas con et amusant comme méthode.GallyHC a écrit :Ouep, mais le problème est que si pour x raison le programme plante ou j'en passe et que le fichier a bien été créer... Il restera et sera accessible donc le faire en mémoire est une bonne solution (avec cryptage en plus).
Ensuite Pour la sécurité, tu peux aussi te créer ton propre "UserAgent" et seul celui-là aura accès au Fichier (le fichier ne sera plus un txt mais un php). Tu ajoute ce script au départ de ton fichier (*.php).
Ce n'est pas une solution miracle, mais cela augmente un peu la protectionCode : Tout sélectionner
<?php if ($_SERVER['HTTP_USER_AGENT'] != 'TonUserAgent') { echo "forbidden"; exit(); } ?>
Cordialement,
GallyHC
Code : Tout sélectionner
;Procédure de hachage des données
Procedure.s SepareDonnees(phrase$ ,type)
Protected a$,b$
If type=1
a$=StringField(phrase$,6," ")
ProcedureReturn a$
EndIf
If type=2
a$=StringField(phrase$,10," ")
ProcedureReturn a$
EndIf
EndProcedure
;Chargement du fichier de données meteorologic.net
Procedure ChargementCoordonnees()
If ReceiveHTTPFile("http://www.meteorologic.net/data/radar/brute_donnee.txt", "brute_donnee.txt")
Else
MessageRequester("Information.", "Chargement des données météorologic.net impossible", #PB_MessageRequester_Ok )
EndIf
If ReadFile(1,"brute_donnee.txt")
Ligne1.s = ReadString(1)
While Not Eof(1)
Ligne.s = ReadString(1)
DonLat.s = SepareDonnees(Ligne.s,1)
DonLat1.d = ValD(DonLat.s)
DonLong.s = SepareDonnees(Ligne.s,2)
DonLong1.d = ValD(DonLong.s)
StartDrawing(CanvasOutput(#CanvasGadgetCarteCellules))
ProjectionCellules(DonLat1.d, DonLong1.d)
StopDrawing()
Wend
CloseFile(1)
EndIf
EndProcedure
Code : Tout sélectionner
Procedure Donnees()
Resultat$ = GetGadgetItemText(#WebGadgetCellules, #PB_Web_HtmlCode)
SetGadgetText(#EditorCellules, Resultat$)
EndProcedure
Pourquoi ne pas utiliser un ListViewGadget() ?MetalOS a écrit :Et il possible ensuite de traiter ligne par ligne le contenue de l'EditorGadget ?Code : Tout sélectionner
Procedure Donnees() Resultat$ = GetGadgetItemText(#WebGadgetCellules, #PB_Web_HtmlCode) SetGadgetText(#EditorCellules, Resultat$) EndProcedure
MetalOS a écrit :Et il possible ensuite de traiter ligne par ligne le contenue de l'EditorGadget ?
Code : Tout sélectionner
Enumeration
#Mainform
#Editor
EndEnumeration
Define.l Event, GEvent
Global WindowStyle.i=#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget
Procedure Open_MainForm()
Protected Result.s
OpenWindow(#Mainform, 0, 0, 500, 400, "New Form", WindowStyle)
EditorGadget(#Editor, 10, 10, 480, 370)
;On va un peu remplir l'editor
For i=0 To 20
AddGadgetItem(#Editor, -1, "Ligne "+Str(i))
Next
;Lecture de EditorGadget LIGNE PAR LIGNE
For i = 0 To CountGadgetItems(#Editor)
Debug GetGadgetItemText(#Editor, i)
Next
EndProcedure
Open_MainForm()
Repeat
Event = WaitWindowEvent(10)
GEvent = EventGadget()
Select Event
Case #PB_Event_Gadget
Select GEvent
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
Code : Tout sélectionner
; Extraire Longitude et latitude via expression régulière by Ar-S
; Extraire Longitude et latitude via expression régulière by Ar-S
InitNetwork()
#LA = 0
#LO = 1
Global.s T
Procedure ExtractionCoord(Contenu.s)
Dim result$(0)
CreateRegularExpression(0,"[-]?+[0-9]{1,3}+[.]+[0-9]{1,10}")
NbFound = ExtractRegularExpression(0, T , result$())
Debug "Trouvé " + Str(NbFound)
ReDim result$(NbFound)
Mode = #LA
For k = 0 To NbFound-1
If Mode = #LO
TXT$ = "LONGITUDE : "
Mode - 1
ElseIf Mode = #LA
TXT$ = "LATITUDE : "
Mode + 1
EndIf
Debug TXT$ + result$(k) ; ICI au lieu du dbug tu n'as plus qu'à afficher TXT$ dans un listviewgadget()
Next
FreeRegularExpression(0)
EndProcedure
Procedure.s ChargementCoordonnees()
If ReceiveHTTPFile("http://www.meteorologic.net/data/radar/brute_donnee.txt", GetCurrentDirectory()+"brute_donnee.txt")
Else
MessageRequester("Information.", "Chargement des données météorologic.net impossible", #PB_MessageRequester_Ok )
EndIf
T.s = ""
If ReadFile(1, GetCurrentDirectory()+"brute_donnee.txt")
Ligne1.s = ReadString(1)
While Not Eof(1)
T.s + ReadString(1)
Wend
CloseFile(1)
ProcedureReturn T
EndIf
EndProcedure
ExtractionCoord(ChargementCoordonnees() )
La méthode de récupération/lecture de Falsam est couplable avec mon extraction des données.MetalOS a écrit :@falsam
Je devrais pouvoir faire ce que je veut avec ton exemple. Merci.
@Ar-S
Merci pour ton exemple mais comme je voudrais éviter de télécharger le fichier en local sa n'ira pas car j'utilise déjà une méthode similaire que je cherche justement à remplacer.
Merci à tous pour votre aide.