L'idée m'est venu un jour au boulot alors que j'avais oublié ma clef Usb avec mes fichiers pour bosser. Et comme au boulot le FTP est interdit...impossible d'utiliser le FTP.
Donc voilà ce que j'ai pendu. Actuellement on peu naviguer dans le repertoire et ouvrir les fichiers... Mais l'upload des fichiers une fois modifié ne fonctionne pas. Si quelqu'un veut me donner un coup de main il est le bien venu
Le Code Purebasic
Code : Tout sélectionner
Structure FileStructure
Name.s
Size.l
Type.b
EndStructure
Global Dim File.FileStructure(100),NbFile,Folder.s,AddPath.s
Folder="http://yann.lebrun.club.fr/temps/" ;Repertoire de base
AddPath=""; si jamais on navigue dans le repertoire de base
Enumeration
#Main
EndEnumeration
;- Gadget Constants
;
Enumeration
#ExplorerList
EndEnumeration
InitNetwork()
;-Procedure pour le Drag 'N Drop
Procedure.l DropFiles()
ProcedureReturn EventwParam()
EndProcedure
Procedure GetNumDropFiles(*dropFiles)
ProcedureReturn DragQueryFile_(*dropFiles, $FFFFFFFF, temp$, 0)
EndProcedure
Procedure.s GetDropFile(*dropFiles, index)
bufferNeeded = DragQueryFile_(*dropFiles, index, 0, 0)
For a = 1 To bufferNeeded: buffer$ + " ": Next ; Short by one character!
DragQueryFile_(*dropFiles, index, buffer$, bufferNeeded+1)
ProcedureReturn buffer$
EndProcedure
Procedure FreeDropFiles(*dropFiles)
DragFinish_(*dropFiles)
EndProcedure
;-DownloadFile
Procedure.s FindValue(header.s,find.s)
;OpenConsole()
s.s=""
i=FindString(header,find,1)
If i>0
s=Mid(header,i+Len(find),Len(header)-i-Len(find))
EndIf
p=FindString(s,Chr(13)+Chr(10),1)
If p>0 And i>0
s=Left(s,p)
EndIf
ProcedureReturn Trim(s)
EndProcedure
Procedure.b NiceDownload(URL.s,localfile.s)
Protected ServerID.l, Header.s, *Buffer = AllocateMemory(1), String.s, Server.s, Path.s, i.l, DataLength.l,endOfHeader.b
URL = RemoveString(URL,"http://",1)
i = FindString(URL,"/",1)
If i
Server = Left(URL,i-1)
Path = Right(URL,Len(URL)-i)
Else
Server = URL
EndIf
ServerID = OpenNetworkConnection(Server,80)
If ServerID
;Header for the GET request
Header = "GET /"+Path+" HTTP/1.1"+#CRLF$
Header + "Host: "+Server+#CRLF$+#CRLF$
SendNetworkData(ServerID,@Header,Len(Header)) ;Send the GET request
Repeat
Repeat ;Wait for it to start sending data
Delay(2) ;No need to use 100% CPU while waiting
Until NetworkClientEvent(ServerID) = #PB_NetworkEvent_Data
Repeat ;Put all recieved data in a sring
DataLength = ReceiveNetworkData(ServerID,*Buffer,1)
String + PeekS(*Buffer,DataLength)
If FindString(String,#CRLF$+#CRLF$,1)>0
endOfHeader=1
Break
EndIf
Until DataLength = 0
Until endOfHeader=1
FreeMemory(*Buffer) ;Don't need to use this memory anymore
*Buffer=AllocateMemory(1024)
maxlen=Val(FindValue(string,"Content-Length:"))
totalr=0
fid=CreateFile(#PB_Any,localfile)
If fid<>0
While totalr<maxlen
Repeat ;Wait for it to start sending data
Delay(2) ;No need to use 100% CPU while waiting
Until NetworkClientEvent(ServerID) = #PB_NetworkEvent_Data
Repeat ;Put all recieved data in a sring
DataLength = ReceiveNetworkData(ServerID,*Buffer,1024)
WriteData(fid,*Buffer,datalength)
totalr + datalength
Until DataLength < 1024
;status = (1.0*totalr)/maxlen*100.0
;SetGadgetState(#ProgressBar_0,status)
;WindowEvent()
Wend
CloseFile(fid)
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndIf
EndProcedure
;-UploadFile
Procedure Upload(FullFileName$)
;################################################################
;# 22/2/2006 - Upload file to web trough POST command | Pantcho #
;################################################################
URL$ = Folder ; the main domain
PATH$ = "uploadfile.Php" ; or what ever script that accepts the enctype="multipart/form-data"
;FullFileName$ = "c:\pb\text.txt" ; Full path+filename
ActionName$ = "fichier" ; this is important!! this action must be the same as <form ... name="fichier">
FileHeader$ = "Content-Disposition: form-Data; name="+Chr(34)+ActionName$ + Chr(34) +"; filename="+Chr(34)+ FullFileName$+ Chr(34) +#CRLF$
FileHeader$ + "Content-Type: text/plain" ; <= Here change the content type regarding your file! (text,image etc...) we go on text
; ^^^ note: Havn't been tested with binary files.
Border$ = "23232323232" ; Border to the file data (Check RFC for more info)
conid.l = OpenNetworkConnection(URL$,80)
If conid
Debug "Connected"
*Buffer = AllocateMemory(100000) ; some memory for our file buffer
POST$ = "POST "+ PATH$ +" HTTP/1.0" ; the Post command we are going to send to the server
OpenFile(1,FullFileName$)
Repeat
Text$ = ReadString(1)
FILE$ + Chr(13) + Chr(10)+Text$
Until Eof(1)
; This is the border header for uploading
FILE$ = "------"+Border$ + #CRLF$ + FileHeader$ +#CRLF$ + FILE$ + "------" + Border$ + "--"
; Back to post, while sending header with the correct content length (border+file+border)
POST$ + #CRLF$ + "Content-Type: multipart/form-Data, boundary=----"+Border$ + #CRLF$ + "Content-Length: " + Str(Len(FILE$))
POST$ + #CRLF$ + #CRLF$ + FILE$
CloseFile(1)
PokeS(*Buffer,"",0)
PokeS(*Buffer,POST$,Len(POST$))
SendNetworkData(conid,*Buffer,Len(POST$))
Repeat
Server$ = PeekS(*Buffer)
Debug Server$
res.l = ReceiveNetworkData(conid, *Buffer, 1000)
Until Server$ = PeekS(*Buffer)
Else
Debug "NO CONNECTION"
EndIf
EndProcedure
Procedure.s ReadServerinfo(Url.s)
NiceDownload(Url,"Temps/temp.txt")
String.s=""
If ReadFile(0,"Temps/temp.txt")
While Eof(0) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
String+ ReadString(0)+Chr(10) ; Affiche ligne par ligne le contenu du fichier
Wend
CloseFile(0)
;DeleteFile("Temps/temp.txt")
EndIf
ProcedureReturn String
EndProcedure
Procedure ExamineFile()
Url.s=Folder+"File.php?path="+AddPath
Directory.s=ReadServerinfo(Url)
P_Start=FindString(Directory,"<Thyphoon>",0)
P_End=FindString(Directory,"</Thyphoon>",0)
Directory.s=ReplaceString(Mid(Directory,P_Start,P_End-P_Start),"<Thyphoon>","")
NbFile = CountString(Directory,Chr(10))
Debug "Nombre de Fichier..."+Str(NbFile)
For a=1 To NbFile
Ligne.s=StringField(Directory,a,Chr(10))
Debug Ligne
File(a)\Name=StringField(Ligne,1,",")
Select StringField(Ligne,3,",")
Case "dir"
File(a)\Type=#PB_DirectoryEntry_Directory
Case "file"
File(a)\Type=#PB_DirectoryEntry_File
EndSelect
File(a)\Size=Val(StringField(Ligne,2,","))
Next
EndProcedure
Procedure UpdateExlorerlist()
ClearGadgetItemList(#ExplorerList)
For z=1 To NbFile
AddGadgetItem(#ExplorerList,-1,File(z)\Name+Chr(10)+Str(File(z)\Size)+" Ko")
Next
EndProcedure
Procedure RunFile(n.l)
url.s=Folder+AddPath+File(n)\Name;Url ou le Fichier est logé
NiceDownload(Url,AddPath+GetFilePart(Url));Téléchargement
Date_Before=GetFileDate(AddPath+GetFilePart(Url), #PB_Date_Modified) ;On prend la date avant
RunProgram(AddPath+GetFilePart(Url),"", "", #PB_Program_Wait) ;On lance le fichier
Date_After=GetFileDate(AddPath+GetFilePart(Url), #PB_Date_Modified) ;On prend la date apres
If Date_Before<>Date_After ; si la date d'avant et d'apres est différente c'est que le fichier a été modifié
Debug "on Upload le fichier"
Upload(AddPath+GetFilePart(Url)) ;On upload le fichier modifier...
Else
Debug "pas besoin d'uploader"
EndIf
EndProcedure
Procedure Open_Window()
If OpenWindow(#Main, 0, 0, 668, 300, "Synchro", #PB_Window_ScreenCentered| #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
DragAcceptFiles_(WindowID(#Main), 1)
If CreateGadgetList(WindowID(#Main))
ListIconGadget(#ExplorerList, 0, 0, 350, 65, "", 200,#PB_ListIcon_GridLines)
AddGadgetColumn(#ExplorerList, 0, "Name ", 65)
AddGadgetColumn(#ExplorerList, 1, "Size ", 65)
AddGadgetColumn(#ExplorerList, 2, "Type ", 65)
AddGadgetColumn(#ExplorerList, 3, "Modified ", 65)
EndIf
EndIf
EndProcedure
Open_Window()
ExamineFile()
UpdateExlorerlist()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_SizeWindow
ResizeGadget(#ExplorerList, 0, 0, WindowWidth(#Main), WindowHeight(#Main))
Case #WM_DROPFILES ;On upload les fichiers qu'on a Drag'ndropé
*dropped = DropFiles()
num.l = GetNumDropFiles(*dropped)
f$ = ""
For files = 0 To num - 1
f$ + GetDropFile(*dropped, files) + Chr (13)
Next
MessageRequester("Drag 'n' Drop", Str (num) + " file (s) dropped:" + Chr (13) + Chr (13) + f$)
FreeDropFiles(*dropped)
Case #PB_Event_Gadget
Select EventGadget()
Case #ExplorerList
Select EventType()
Case #PB_EventType_LeftDoubleClick
;On selectionne le fichier qu'on veut charger
f=GetGadgetState(#ExplorerList)+1
;Si on a un fichier
If f>0 And File(f)\Type=#PB_DirectoryEntry_File
Debug "chargement du fichier"
Thread = CreateThread(@RunFile(), f) ;On lance le fichier sous forme de Thread ce qui permet de ne pas bloquer l'application
;Si on a un repertoir
ElseIf f>0 And File(f)\Type=#PB_DirectoryEntry_Directory
Debug "changement de repertoir>"+AddPath+"<"
;Si on doit retourner en arrière dans le chemin
If AddPath<>"" And File(f)\Name=".."
Debug "Ancien:"+AddPath
For z=Len(AddPath)-1 To 0 Step -1
If z=1 Or Mid(AddPath,z,1)="/"
Break
EndIf
Next
AddPath=Left(AddPath,z-1)
Debug "Nouveau:"+AddPath +"("+Str(z)+")"
ExamineFile()
UpdateExlorerlist()
;Sinon on rajoute le chemin
ElseIf File(f)\Name<>"." And File(f)\Name<>".."
AddPath+File(f)\Name+"/"
CreateDirectory(AddPath)
ExamineFile()
UpdateExlorerlist()
EndIf
EndIf
;
EndSelect
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Code : Tout sélectionner
$path=$_GET[path];
$dir = "./".$path;
// Ouvre un dossier bien connu, et liste tous les fichiers
if (is_dir($dir)) {
echo "<Thyphoon>";
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo $file.",".@filesize($dir . $file).",".@filetype($dir . $file).chr(10);
}
closedir($dh);
}
echo "</Thyphoon>";
}