
Le WEB ça va vraiment très vite, pour moi le CSS la dernière fois que je me suis penché dessus c'était une liste d'instructions imbuvables.
Peut être qu'un jour j'arriverais à aimer le WEB....

Merci de ton sujet et de ce lien

Mort pour le momentfalsam a écrit : Lien pour rappel : http://109.13.115.206:6832/index.html
De nouveau en ligne. Je coupe mon serveur le soir et je ne relance pas systématiquement.Ar-S a écrit :Mort pour le moment
Voici un extrait de la page index.html dans laquelle se trouve deux variables {{userip}} pour l'adresse IP et {{countviews}} pour le compteur de vues.Ar-S a écrit :Une fois que l'atomic web est lancé. Comment gère-t-il le contenu de la page index par exemple ?
Code : Tout sélectionner
<!-- Show client ip -->
...
<div class="w3-center">
<p>Votre adresse ip <strong>{{userip}}</strong></p>
</div>
....
<!-- Footer -->
<div class="w3-bottom">
<p class="w3-padding-medium">Powered by <a href="http://www.w3schools.com/w3css/default.asp" target="_blank">w3.css</a>
& <a href="http://purebasic.fr" target="_blank">PureBasic</a>
- {{countviews}} views</p>
</div>
Code : Tout sélectionner
*BufferOffset
Code : Tout sélectionner
BufferOffset = PeekS(*BufferOffset, -1, #PB_UTF8)
Code : Tout sélectionner
Result = ReplaceString(BufferOffset, "{{userip}}", IPString(GetClientIP(ClientID))) : BufferOffset = Result
Result = ReplaceString(BufferOffset, "{{countviews}}", Str(CountViews\count))
je n'ai pas encore traités les données POST mais j'ai mon idée sachant que le serveur est capable de reconnaître la page demandée.Ar-s a écrit :Un input qui demande un NOM et selon la réponse renvoyée afficher Bienvenu admin si le NOM est admin ou "DESOLE MAUVAIS NOM" si la réponse n'est pas admin.
Code : Tout sélectionner
<!DOCTYPE html>
<html>
<head>
<link href="ars.css" rel="stylesheet" />
<title>Atomic Web Server Ar-S Test</title>
</head>
<body>
<div class="titre"> Atomic Web Server (<em>Unicode</em>) </div>
<p style='text-align:center'>Ceci est la première page de votre site web. / This is the first page of your website.</p>
<p> IP : {{userip}} - Visite : {{countviews}}
</body>
</html>
Code : Tout sélectionner
<style type="text/css">
body{ text-align:center; font-size:12px; background-color:#A3B0C8; min-width:960px; }
.titre{ background-color:#A3B0C8; position:relative; width:960px; text-align:center; margin:0 auto; height:35px; font-size:24px; text-shadow: 1px 1px #dddddd;}
</style>
GET /index.html HTTP/1.1
Host: 109.13.115.206:6834
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
GET /style.css HTTP/1.1
Host: 109.13.115.206:6834
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/css,*/*;q=0.1
Referer: http://109.13.115.206:6834/index.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
J'aimerais pouvoir :GET /favicon.ico HTTP/1.1
Host: 109.13.115.206:6834
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: image/webp,image/*,*/*;q=0.8
Referer: http://109.13.115.206:6834/index.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Code : Tout sélectionner
;Extract page html from GET /yourpage.html HTTP/1.1
MaxPosition = FindString(Buffer, Chr(13), 5)
Position = FindString(Buffer, " ", 5)
If Position < MaxPosition
RequestedFile = Mid(Buffer, 6, Position-5) ; Automatically remove the leading '/'
RequestedFile = RTrim(RequestedFile)
Else
RequestedFile = Mid(Buffer, 6, MaxPosition-5) ; When a command like 'GET /' is sent..
Code : Tout sélectionner
RequestedFile = Trim(Mid(StringField(Buffer, 1, "HTTP"), 6))
Code : Tout sélectionner
*FileBuffer = AllocateMemory(FileLength + 200) ;MemoryStringLength(@ContentType))
*BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType)
Code : Tout sélectionner
Procedure BuildRequestHeader(*FileBuffer, FileLength, ContentType.s)
Protected Length
Protected Week.s = "Sun, Mon,Tue,Wed,Thu,Fri,Sat"
Protected MonthsOfYear.s = "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"
Protected DayOfWeek.s = StringField("Sun, Mon,Tue,Wed,Thu,Fri,Sat", DayOfWeek(Date()) + 1, ",")
Protected Day = Day(Date())
Protected Month.s = StringField("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", Month(Date()), ",")
Protected Year.s = Str(Year(Date()))
Protected Time.s = FormatDate("%hh:%ii:%ss GMT", Date())
Length = PokeS(*FileBuffer, "HTTP/1.1 200 OK" + #CRLF$, -1, #PB_UTF8) : *FileBuffer + Length
Length = PokeS(*FileBuffer, "Date: " + DayOfWeek + ", " + Day + " " + Month + " " + Year + " " + Time + #CRLF$, -1, #PB_UTF8) : *FileBuffer + Length
Length = PokeS(*FileBuffer, "Server: "+ Title + #CRLF$, -1, #PB_UTF8) : *FileBuffer + Length
Length = PokeS(*FileBuffer, "Content-Length: " + Str(FileLength) + #CRLF$, -1, #PB_UTF8) : *FileBuffer + Length
Length = PokeS(*FileBuffer, "Content-Type: " + ContentType + #CRLF$, -1, #PB_UTF8) : *FileBuffer + Length
Length = PokeS(*FileBuffer, #CRLF$, -1, #PB_UTF8) : *FileBuffer + Length
ProcedureReturn *FileBuffer
EndProcedure
Allons bon !! Est que cela voudrait dire que si je faisZorro a écrit :il me semble me souvenir, que les '+200' sont la pour éviter un débordement possible du buffer
c'est une securité juste pour eviter un depassement de memoire ...
Code : Tout sélectionner
FileLength = Lof(0)
Je l'avais oublié ce topic qui me remémore ces soucis d'allocation mémoire. Merci pour ce rappel. Je vais relire.Zorro a écrit :on avait deja abordé le sujet a propos de Allocatememory