Men det kan da godt være du skal lave en form for statistik på et link inden du sletter det helt. Det kan jo være at serveren bare er nede for en kortere periode... :)
jeg tror også jeg ville lave een form for tæller tilknyttet hvert enkelt link i databasen - der så kan angive en form for status af linket/linkets kvalitet. At det fejler een gang med 404 eller lign. kan skyldes mange ting. Så kan du også logisk angive en max grænse for når at linket skal slettes og ellers angive linkets "kvalitet" men nogle stjerner eller lign.
bemærk at xmlhttp godt kan være lidt tung hvis det er dokumenter eller større arkiver du skal tjekke.
if GetHTML(url) = 0 then 'funktion returnerer 0 hvis siden er nede eller fejl response.write "Jubiii - er nede!" else response.write "Jubiii - jubiii virker!" end if
I dette tilfælde ville 200 to 299 vel betyde at alle værdier mellem 200 og 299 skulle trigger den pågældende case, så en kommasepareret værdiliste ville nærmest være uoverkommelig. Det ville være et af de tilfælde hvor jeg ville anbefale en if...then...else.end if kontruktion... :)
if xmlhttp.status >= 200 and xmlhttp.status <= 299 then GetHTML = 1 else GetHTML = 0 end if
har du en forbindelsesstreng du bruger til at hente data i databasen andre steder eller er dette det første du laver...? Jeg er lidt på jagt efter hvormeget du gerne vil vide og hvormeget du selv har allerede...
Generelt ville jeg jo sige flg. var nødvendig (i pseudokode):
1. hent alle links 2. for hvert link check om der er forbindelse til serveren 3. hvis et link fejler så 3a. opdater fejltælleren for det link i databasen
Derefter kunne man have en anden rutine som sørger for at rydde op i links alt efter hvormange fejl du vil tillade indenfor en given periode...
set cn = server.createobject("ADODB.Connection") cn.Open strDSN set rs = cn.Execute("SELECT * FROM data")
do while not rs.eof ' Check om linket eksisterer - det er nok et kald til en ' funktion som returnerer false hvis det ikke fungerer if not CheckLink(rs("url")) then cn.Execute("UPDATE data SET failCount = failCount + 1 WHERE url = '"& rs("url") &"'") end if rs.MoveNext loop rs.Close set rs = nothing cn.Close set cn = nothing
BEMÆRK at jeg på magisk vis har oprettet et nyt felt i tabellen med url'er som indeholder antallet af fejl i forsøg på at koble til url'en...
set cn = server.createobject("ADODB.Connection") cn.Open strDSN set rs = cn.Execute("SELECT * FROM data")
do while not rs.eof ' Check om linket eksisterer - det er nok et kald til en ' funktion som returnerer false hvis det ikke fungerer ' Regner med denne kode skal ind her?*******************
function GetHTML(url) Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xmlhttp.open "GET", url, false xmlhttp.setRequestHeader "User-Agent","My funky browser." xmlhttp.send()
Select Case xmlhttp.status case 200 to 299 GetHTML = 1 case else GetHTML = 0 End select
if GetHTML(url) = 0 then 'funktion returnerer 0 hvis siden er nede eller fejl response.write "Jubiii - er nede!" else response.write "Jubiii - jubiii virker!" end if
'*******************************************
if not CheckLink(rs("url")) then cn.Execute("UPDATE data SET failCount = failCount + 1 WHERE url = '"& rs("url") &"'") end if rs.MoveNext loop rs.Close set rs = nothing cn.Close set cn = nothing
<% function GetHTML(url) on error resume next Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xmlhttp.open "GET", url, false xmlhttp.setRequestHeader "User-Agent","My funky browser." xmlhttp.send()
if xmlhttp.status >= 200 and xmlhttp.status <= 299 then GetHTML = 1 else GetHTML = 0 End if
If err.number <> 0 then GetHTML = 0 end if
Set xmlhttp = nothing on error goto 0 end function
set cn = server.createobject("ADODB.Connection") cn.Open strDSN set rs = cn.Execute("SELECT * FROM data")
do while not rs.eof ' Check om linket eksisterer - det er nok et kald til en ' funktion som returnerer false hvis det ikke fungerer ' Regner med denne kode skal ind her?*******************
if GetHTML(rs("url")) = 0 then cn.Execute("UPDATE data SET failCount = failCount + 1 WHERE url = '"& rs("url") &"'") end if rs.MoveNext loop rs.Close set rs = nothing cn.Close set cn = nothing
Ja, så er det nok en opgave der er bedre egnet til at køre batch og ikke som et request fra en browser. Hvordan man starter en batch på en webserver med ASP 3.0 uden en speciel ActiveX-komponent til formålet er jeg ikke klar over, men det kan være der er nogle af de andre der ved det...
Den checker at hvis statuskoden ligger indenfor intervallet 200-299 så er linket ok, ellers fejler det. I virkeligheden er det vel, som du selv indikerer, kun et par statuskode der betyder at linket ikke fungerer, så hvis du det er disse som skal være årsag til en optælling af failcount, så skal koden se således ud:
<% function GetHTML(url) on error resume next Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xmlhttp.open "GET", url, false xmlhttp.setRequestHeader "User-Agent","My funky browser." xmlhttp.send()
' Hvis statuskoden er 404 eller 406, så er det en fejl ' ellers ikke... if xmlhttp.status = 404 or xmlhttp.status = 406 then GetHTML = 0 else GetHTML = 1 End if
If err.number <> 0 then GetHTML = 0 end if
Set xmlhttp = nothing on error goto 0 end function
set cn = server.createobject("ADODB.Connection") cn.Open strDSN set rs = cn.Execute("SELECT * FROM data")
do while not rs.eof ' Check om linket eksisterer - det er nok et kald til en ' funktion som returnerer false hvis det ikke fungerer ' Regner med denne kode skal ind her?*******************
if GetHTML(rs("url")) = 0 then cn.Execute("UPDATE data SET failCount = failCount + 1 WHERE url = '"& rs("url") &"'") end if rs.MoveNext loop rs.Close set rs = nothing cn.Close set cn = nothing
Det andet virkede også fint, men inden man svælger at slette nogen link, bør man nok køre "tjek" en 3 - 4 gange på en uge måske. Jeg kunne godt tænke mig hvis et link kun fejler 1 gang at failcount så bliver sat til 0 hvis linket virker ved andet tjek feks.
Hvis du f.eks. en gang om ugen gennemløber dine links for fejl, kan du jo dels slette og dels nulstille i samme arbejdsgang (det er faktisk nok det bedste at gøre det på denne måde, med mindre du vil indføre et datostempel for at angive siden hvornår failcount er startet... men det ville vist være lidt overkill i første omgang).
Det kunne du f.eks. gøre ved at udføre denne kode: <% strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("members.mdb") & ";Persist Security Info=False"
set cn = server.createobject("ADODB.Connection") cn.Open strDSN cn.Execute("DELETE FROM data WHERE failCount > 3") cn.Execute("UPDATE data SET failCount = 0") cn.Close set cn = nothing
Hvis det skulle være rigtig fancy (aaah ok, så lidt fancy da), så skulle du udføre disse to trin i en transaktion, så du ikke ender med at slette links men ikke nulstillet resten. M.a.o. du gennemfører det hele eller ingenting! Det burde gøres således (BEMÆRK i øvrigt at paranteser omkring Execute-parametre er fjernet - pga. VBScript-syntaks for metodekald):
set cn = server.createobject("ADODB.Connection") cn.Open strDSN on error resume next cn.BeginTrans cn.Execute "DELETE FROM data WHERE failCount > 3" cn.Execute "UPDATE data SET failCount = 0" if err.number = 0 then cn.CommitTrans else cn.RollbackTrans end if err.clear on error goto 0 cn.Close set cn = nothing
Men jeg synes nu alligevel at man - om ikke andet, så rent principielt - bør søge direkte på de lovelige statusværdier (30/07-2005 14:39:20) frem for blot at være doven og teste på et helt interval (200-299).
Det er et spørgsmål om man vil skyde med spredhagl eller et enkelt projektil. Jo mere sikker på hvad det er du vil checke for, des mere målrettet kan du udskille fejlkoder... som i den seneste version, hvor det kun er fejlkoderne 404 og 406 der resulterer i en fejlmarkering.
Hvis man vælger fejlkoderne 404 406 osv. så er der vel et hav af koder man skal indsætte, ved ikke hvor mange der er og hvad de alle gør, men der er vel en del at tage hensyn til?
Ja, det kommer an på hvad du vil checke for. I denne tråd har temaet vel været at serveren ikke kunne finde en side til det ønskede link... men du kan i princippet checke for en masse kriterier (jf. det link nielle postede tidligere i denne tråd: http://www.ietf.org/rfc/rfc2068.txt)...
Tja, jeg ønsker at tjekke for døde links, sider der ikke bliver vist korrekt, feks. 403 for mange bruger 500 server fejl, forbidden osv. Det gør scriptet jo faktisk også som det er nu ikk?
I princippet kunne man jo argumentere for at alle statuskode på eller over 400 burde resultere i en fejlmarkering, da de vel alle giver en side som ikke er særlig interessant at se på. Koden vi er kommet frem til i denne tråd, tager kun hånd om 404 og 406, men det burde være overkommeligt for dig at tilføje flere koder hvis det bliver nødvendigt.
jow - men det var egentlig mest erfaringsmæssigt - for så skal man jo have rettet linket. :) Men ja - man bliver jo redirected.
Man skal også være lidt opmærksom på at webhosts med en IIS med custom errorpages - godt kan give status 200 selvom man har ramt fejlsiden, hvilket jo ikke er så hensigtsmæssigt.
Hmmm... der er jo i realiteten ikke nogen fejlhåndtering omkring gennemløbet af links, så der kunne i realiteten godt opstå en fejl ifm. udlæsningen af data fra databasen. På samme måde kan der jo også godt opstå en fejl i opdateringen eller sletningen af links. Så helt sikker kan du ikke være, men hvis ellers databasen er tilgængelig og sitet kører som forventet, vil jeg mene at det er overvejende sandsynligt at tjekket gennemføres...
Hvorfor? Har du da konstateret at det ikke gennemføres?
jeg kan godt se et problem men det kommer an på hvordan du har indarbejdet dette indlæg:
softspot 31/07-2005 11:04:23
Hvis du udfører det før du går i gang med alt det andet, hver gang scriptet kører - og alle links starter fra nul så vil de forblive 0-1 hele tiden.
En løsning kunne være hvis du har indarbejdet ovenstående at rette loopet til således:
if GetHTML(rs("url")) = 0 then cn.Execute("UPDATE data SET failCount = failCount + 1 WHERE url = '"& rs("url") &"'") else cn.Execute("UPDATE data SET failCount = 0 WHERE url = '"& rs("url") &"'") end if
og så efter at du har loopet alle dine urls igennem foretage din oprydning med:
nå men - jeg havde lige lidt kvalitetstid her sidst på aftenen og forsøgte lige selv med scriptet og en database med nogle links min database ser sådan ud:
Databasenavn: members.mdb (ligger i db-folderen) Tabelnavn: data
Og nu har jeg modificeret lidt i scriptet således, at jeg også kunne bruge det til noget :o) - Jeg synes det gik rigtigt fint også med 200 links... Ikke hurtigt med ok. Der er ikke lavet voldsomt om - bare inkluderet diverse ting som er nævnt ovenover som jeg ikke ved om du har med...
<%@ Language=VBScript %> <% 'Response.Buffer = False 'kan også bruges i stedet for flush %> <% Server.ScriptTimeout = 100 %> <HTML> <HEAD> <TITLE>LinkDatabase</TITLE> </HEAD> <BODY> <H1>Linkoversigt:</H1> <% dim lastError function GetHTML(url) On Error Resume Next Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xmlhttp.open "GET", url, false xmlhttp.setRequestHeader "User-Agent","LinkTestBrowser" xmlhttp.send()
' Hvis statuskoden er 400, 401, 402, 403, 404, 406, 410, så er det en fejl ' ellers ikke... Select Case CInt(xmlhttp.status) Case 400, 401, 402, 403, 404, 406, 410 lastError = xmlhttp.status GetHTML = 0 Case Else GetHTML = 1 End Select
If Err.Number <> 0 then GetHTML = 0 end if
Set xmlhttp = nothing on error goto 0 end function
set cn = server.createobject("ADODB.Connection") cn.Open strDSN set rs = cn.Execute("SELECT * FROM data;")
With Response .Write "<table width=""600"">" .Write "<tr><th width=""250"">URL</th><th width=""250"">Sidste tjek</th><th width=""100"">Status</th></tr>" .Write "</table>" End With
cn.BeginTrans
While rs.eof = False ' Check om linket eksisterer - det er nok et kald til en ' funktion som returnerer false hvis det ikke fungerer ' Regner med denne kode skal ind her?******************* With Response .Write "<table width=""600"">" .Write "<tr><td width=""250"">" & rs("url") & "</td><td width=""250"">" & rs("urlDate") & " - " & DateDiff("d", rs("urlDate"), Now) & " dag(e) siden...</td>" If GetHTML(rs("url")) = 0 then .Write "<td align=""center"" width=""100""><font color=""red"">fejl (" & rs("urlFailCount") + 1 & ")(status: " & lastError & "</font></td>" cn.Execute("UPDATE data SET urlFailCount = urlFailCount + 1, urlDate = Now WHERE urlID = " & rs("urlID") & ";") Else .Write "<td align=""center"" width=""100""><font color=""green"">ok</font></td>" cn.Execute("UPDATE data SET urlFailCount = 0, urlDate = Now WHERE urlID = " & rs("urlID") & ";") End If .Write "</tr>" .Write "</table>" End With Response.Flush rs.MoveNext Wend
cn.Execute("DELETE FROM data WHERE urlFailCount > 3;")
If Err.Number = 0 then cn.CommitTrans Else cn.RollbackTrans end if
rs.Close set rs = nothing cn.Close set cn = nothing
hiks >> Jeg kan godt lide din idé med at nulstille fail hvis linket fungerer, det sikrer da i det mindste at links der svarer engang imellem får lidt mere tid at leve i. Jeg synes dog ikke umiddelbart at det er nødvendigt at gøre hele checkdelen til en transaktion, idet du så kommer til at fortryde _ALLE_ opdateringer hvis blot et af dine links fejler (og så skal det hele bare gøre forfra næste gang). Man kan naturligvis argumentere for at det så giver de enkelte links lidt længere tid at leve i, men principielt synes jeg ikke det er optimalt (transktionsloggen bliver også så stor :))...
function GetHTML(url) On Error Resume Next Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xmlhttp.open "GET", url, false xmlhttp.setRequestHeader "User-Agent","LinkTestBrowser" xmlhttp.send()
' Hvis statuskoden er 400, 401, 402, 403, 404, 406, 410, så er det en fejl ' ellers ikke... Select Case CInt(xmlhttp.status) Case 400, 401, 402, 403, 404, 406, 410 lastError = xmlhttp.status GetHTML = 0 Case Else GetHTML = 1 End Select
If Err.Number <> 0 then lastError = Err.Number 'denne er tilføjet derfor ingen lastError GetHTML = 0 end if
Set xmlhttp = nothing on error goto 0 end function
og tror måske grunden til at den fejler er nu at xmlhttp.status godt kan melde null men er ikke sikker derfor er det ikke sikkert CInt(xmlhttp.status) virker.
det var det softspot også skrev - så laver den pt en rollback hvis den møder en fejl - derfor bliver der ikke updateret. Så det skal vi lige have på plads... :o)
Det er kanon, meget tæt på perfekt:) Måske kunne det være godt, hvis det sidste tjek altid vises øverst, i stedet for nederst, så behøver man ikke at scrolle, kan det måske laves? Og til aller sidst en counter øverst, så kan man meget tydlig se hvor langt scriptet er nået. Bare hvis det ikke er for meget arbejde i det.
hehe sjovt nok var det - det jeg lavede til mig selv lidt senere igår... Har lavet det i javascripts (som ikke er min stærke side - men det her gik da vist lige) - jeg ved ikke helt hvad du mener med øverst/nederst jeg har lavet et bookmark i bunden nu så du kan hoppe derned.
here goes:
<%@ Language=VBScript %> <% 'Response.Buffer = False 'kan også bruges i stedet for flush %> <% Server.ScriptTimeout = 100 %> <% Session.LCID = 1030 %> <HTML> <HEAD> <TITLE>LinkDatabase</TITLE> </HEAD> <BODY> <H1>Linkoversigt:</H1>
<SCRIPT language="Javascript"> function countGood(objectX){ var count = parseInt(objectX.value); objectX.value = count + 1; } </SCRIPT>
<INPUT VALUE="0" NAME="good" maxlength=3 readonly size =3> godkendte links...<BR> <INPUT VALUE="0" NAME="bad" maxlength=3 readonly size =3> dårlige links...<BR><BR> <A href="#"> Gå til bunden</A> <% dim lastError function GetHTML(url) On Error Resume Next Set xmlhttp = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") xmlhttp.open "GET", url, false xmlhttp.setRequestHeader "User-Agent","LinkTestBrowser" xmlhttp.send()
' Hvis statuskoden er 400, 401, 402, 403, 404, 406, 410, så er det en fejl ' ellers ikke... Select Case CInt(xmlhttp.status) Case 400, 401, 402, 403, 404, 406, 410 lastError = xmlhttp.status GetHTML = 0 Case Else GetHTML = 1 End Select
If Err.Number <> 0 then lastError = Err.number GetHTML = 0 end if
Set xmlhttp = nothing on error goto 0 end function
set cn = server.createobject("ADODB.Connection") cn.Open strDSN set rs = cn.Execute("SELECT * FROM data;")
With Response .Write "<table width=""600"">" .Write "<tr><th width=""250"">URL</th><th width=""250"">Sidste tjek</th><th width=""100"">Status</th></tr>" .Write "</table>" End With
cn.BeginTrans
While rs.eof = False ' Check om linket eksisterer - det er nok et kald til en ' funktion som returnerer false hvis det ikke fungerer ' Regner med denne kode skal ind her?******************* With Response .Write "<table width=""600"">" .Write "<tr><td width=""250"">" & rs("url") & "</td><td width=""250"">" & rs("urlDate") & " - " & DateDiff("d", rs("urlDate"), Now) & " dag(e) siden...</td>" If GetHTML(rs("url")) = 0 then .Write "<td align=""center"" width=""100""><font color=""red"">fejl (" & rs("urlFailCount") + 1 & ")(status: " & lastError & "</font></td>" .Write "<SCRIPT>countGood(bad);</SCRIPT>" 'tæl op cn.Execute("UPDATE data SET urlFailCount = urlFailCount + 1, urlDate = Now WHERE urlID = " & rs("urlID") & ";") Else .Write "<td align=""center"" width=""100""><font color=""green"">ok</font></td>" .Write "<SCRIPT>countGood(good);</SCRIPT>" 'tæl op cn.Execute("UPDATE data SET urlFailCount = 0, urlDate = Now WHERE urlID = " & rs("urlID") & ";") End If .Write "</tr>" .Write "</table>" End With Response.Flush rs.MoveNext Wend
cn.Execute("DELETE FROM data WHERE urlFailCount > 3;")
If Err.Number = 0 then cn.CommitTrans Else cn.RollbackTrans end if
jeg sidder og overvejer om det kan lade sig gøre med divs og noget javascript men ellers tror jeg ikke... Du må jo tænke på at serveren smider noget til browseren fortløbende og det næste vil du så have til at stå ovenover det som den lige har smidt afsted, hvilket er vanskeligt at klare i ren asp, vil jeg tro. Så jeg vil tro at du skal have fat i noget klient side scripting og som sagt så er det ikke min skarpeste side. :D Min kunnen svarer nok nogenlunde til ovenstående... hehe
hiks >> det er nu også meget godt som det er nu, det var også kun hvis det kunne klares med et par små ændringer. Men ellers siger jeg mange tak for hjælpen.
det har nu lykkedes mig at bringe min maskine i knæ med utallige loops, tror jeg... :s
Men jeg tror frem til at det må være XMLHTTP der ikke når at "grabbe" siden inden vi forsøger at aflæse statusen - jeg kan ikke se hvorfor det skulle være sådan - har lige smidt 500 links på min maskine og to forskellige sessioner og den står "gladeligt" og tygger igennem. Om ikke andet så kan du jo prøve følgende (det var her jeg i første forsøg lagde min maskine ned). Erstat getHTML funktionen med denne:
'sekunder siden midnat dim lngTimer, blnTimedOut lngTimer = Timer blnTimedOut = False
'loop indtil statusen er klar eller timeout (10 sek.) Do Until xmlhttp.status <> "" If Timer - lngTimer >= 10 Then blnTimedOut = True
Exit Do End If Loop
If blnTimedOut = True Then GetHTML = 1 'sætter den til 1, således den ikke bliver slettet pga serveren eller lign. er sløv set xmlhttp = Nothing Exit Function End if
' Hvis statuskoden er 400, 401, 402, 403, 404, 406, 410, så er det en fejl ' ellers ikke... Select Case CInt(xmlhttp.status) Case 400, 401, 402, 403, 404, 406, 410 lastError = xmlhttp.status GetHTML = 0 Case Else GetHTML = 1 End Select
If Err.Number <> 0 then lastError = Err.number GetHTML = 0 end if
Set xmlhttp = nothing
on error goto 0 end function
Prøv så lige at tjek om du fortsat får det fejlnummer. Ovenstående er bare et skud.
nej men den timer sikkert ud en masse gange og vil returnere at URLen eksisterer - men hvis du kan leve med det så er det jo fint. Fra tid til anden skal siderne jo nok blive tjekket.
kommer meget an på hvad det er du har tilføjet. Hvis du forsøger at inkludere den via en anden siden kan det være at response.buffer og <%@ Language=VBScript %> er sat.
Uanset hvad jeg gør, så kan jeg ikke indsætte scriptet i noget grafik, hvis jeg gør det, hænger siden indtil scriptet er kørt, så vises siden først. Kan serveren ikke vise HTML sammen med scriptet?
Headerfejlen er væk, var kommet til at sætte et forkert tegn.
du kan slå det fra med response.buffer eller response.flush - hvis du indarbejder det i en tabel vil det ikke virke før hele tabellen er skrevet færdig. Det er også derfor jeg har lavet opdelingen i adskilte tabeller...
hvis du sætter response.buffer = True så vil den først skrive siden når det hele er genereret - ved response.buffer = False vil den skrive siden fortløbende som tags'ne i dokumentet bliver lukket. Det er bl.a. også grunden til at tabeller ikke bliver "udskrevet" førend </table> er nået for den enkelte tabel.
det er da ved at være et langtidsprojekt det her :o) - igen idag var der jo kun fodbold i fjerneren så det blev til lidt kvalitetstid foran den anden skærm. Jeg har lavet sådan nu at man kan vende links om i rækkefølge - dog kun som vbscript (magtede ikke javascriptet) dvs firefox o.l. er udelukket og så har jeg lagt lidt design på den. Du kan se det her: http://www.uploaded.dk/active/linkdatabase.asp
Jeg skal nok poste sourcen hvis du er interesseret!
'sekunder siden midnat dim lngTimer, blnTimedOut lngTimer = Timer blnTimedOut = False
'loop indtil statusen er klar eller timeout (10 sek.) Do Until xmlhttp.status <> "" If Timer - lngTimer >= 10 Then blnTimedOut = True
Exit Do End If Loop
If blnTimedOut = True Then GetHTML = 1 'sætter den til 1, således den ikke bliver slettet pga serveren eller lign. er sløv set xmlhttp = Nothing Exit Function End if
' Hvis statuskoden er 400, 401, 402, 403, 404, 406, 410, så er det en fejl ' ellers ikke... Select Case CInt(xmlhttp.status) Case 400, 401, 402, 403, 404, 406, 410 lastError = xmlhttp.status GetHTML = 0 Case Else GetHTML = 1 End Select
If Err.Number <> 0 then lastError = Err.number GetHTML = 0 end if
set cn = server.createobject("ADODB.Connection") cn.Open strDSN set rs = cn.Execute("SELECT * FROM data;")
With Response .Write "<table width=""600"">" .Write "<thead><th width=""250"">URL</th><th width=""250"">Sidste tjek</th><th width=""100"">Status</th></thead>" .Write "</table>" End With
cn.BeginTrans
dim i 'taeller til sortering
Response.Write "<div id=""all"">"
While rs.eof = False ' Check om linket eksisterer - det er nok et kald til en ' funktion som returnerer false hvis det ikke fungerer ' Regner med denne kode skal ind her?******************* With Response .Write "<div id=""" & i & """>" .Write "<table width=""600"" id=""" & i & """>" .Write "<tr><td width=""250"">" & rs("url") & "</td><td width=""250"">" & rs("urlDate") & " - " & DateDiff("d", rs("urlDate"), Now) & " dag(e) siden...</td>" If GetHTML(rs("url")) = 0 then if rs("urlFailCount") > 100 then .Write "<td align=""center"" width=""100""><img src=""../images/status/3.gif"" alt=""fejl (" & rs("urlFailCount") + 1 & ")(status: " & lastError & ")"" /></td>" else .Write "<td align=""center"" width=""100""><img src=""../images/status/2.gif"" alt=""fejl (" & rs("urlFailCount") + 1 & ")(status: " & lastError & ")"" /></td>" end if .Write "<SCRIPT>countGood(bad);</SCRIPT>" 'tæl op cn.Execute("UPDATE data SET urlFailCount = urlFailCount + 1, urlDate = Now WHERE urlID = " & rs("urlID") & ";") Else .Write "<td align=""center"" width=""100""><img src=""../images/status/1.gif"" alt=""OK"" /></td>" .Write "<SCRIPT>countGood(good);</SCRIPT>" 'tæl op cn.Execute("UPDATE data SET urlFailCount = 0, urlDate = Now WHERE urlID = " & rs("urlID") & ";") End If .Write "</tr>" .Write "</table>" .Write "</div>" End With i = i + 1 Response.Flush rs.MoveNext Wend
Response.Write "</div>"
cn.Execute("DELETE FROM data WHERE urlFailCount > 1000;")
If Err.Number = 0 then cn.CommitTrans Else cn.RollbackTrans end if
rs.Close set rs = nothing cn.Close set cn = nothing Response.Write "<A name=#></A>" Response.Write "<p>Fejl:<br>" & Err.number & " " & Err.Description & "</p>" End Sub
Call Links() %> </BODY> </HTML>
Bemærk venligst at jeg sgu fik lavet det om til et javascript også... Jeg lærer også!
Bemærk også jeg har sat diverse grænser for at smide links væk op og smidt det i en sub - det var hvis jeg skulle bruge det senere hen. Grænserne og alt andet justerer du jo bare selv.
Jeg havde egentlig tidligere een idé om at jeg ville trække een fra når linket virkede således at man fik et kvalitetsbarometer for linkets tilstand over tid, men jeg undlod dog dette pt.
Jeg har tænk en del over måden der tjekkes på. Hvis serveren slet ikke findes, hvis et domaine simpelthen er lukket og dns nedtaget, retuneres der ikke nogen fejlkode, protokolen vil være ukendt. men systemet siger alligevel ok.
Derimod hvis man tjekker om kode 200 er tilstede ????
Jeg har et par links, som er lukket og hvor DNS'en er nedtaget, de retunerer ikke nogen fejlkode, hvis man tager egenskaber for domainet, er protokollen ukendt, disse sider vil med: ' Hvis statuskoden er 400, 401, 402, 403, 404, 406, 410, så er det en fejl
blive godkendt som OK, selvom det er døde sider. Med: if xmlhttp.status >= 200 and xmlhttp.status <= 299 then
ville de blive fanget som døde sider.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.