Wou het net zeggen jaquote:Op donderdag 6 september 2007 13:46 schreef colourAgga het volgende:
[..]
Ja dat klopt, maar over het algemeen behoren die servers binnen een enkele seconde te reageren. Mocht je 500 servers gaan uitzoeken dan zal dat dus ook met een timeout van een seconde je 500 secondes kosten. Je kan de timeout natuurlijk nog krapper gaan nemen. Wat je eventueel ook nog zou kunnen doen is de servers in een array stoppen, en als ze binnen een bepaalde tijd niet reageren te verschuiven naar later in de array of een andere array om op het einde de trage servers nog eens te checken.
Je kan natuurlijk flush() gebruiken om je output buffers te flushen zodat je output hebt terwijl het script draait (anders geeft hij pas na alle servers langslopen je output door).
Het is makkelijker om een script te gaan maken en dit in een cronjob op te nemen om op vaste intervallen dit script al je servers te laten pollen en dit weg te schrijven naar een database/bestand. Zodat als je de site bezoekt je gewoon de meest recente informatie direct te zien krijgt. Mocht je dan handmatig willen verversen dan kan dat.
Ja dat was een in koppertjequote:
Ook al aande lange kant, bij mij gaan servers als ze niet binnen 500 ms (0.5 seconde) niet reageren al in het 'slow reply' bakje en als ze er langer dan 1000 ms (1 seconde) over doen is het over en sluitenquote:Op donderdag 6 september 2007 16:10 schreef h.henkie het volgende:
[..]
Ja dat was een in koppertje. Ik zag het later staan, en inmmiddels al op 3 gezet.
![]()
1 |
Timestamp lijkt me op zich geen geheel onlogische keuze.quote:Op donderdag 6 september 2007 20:28 schreef markiemark het volgende:
ik heb in php een timestamp gemaakt. kijk:
[ code verwijderd ]
welk datatype moet ik gebruiken in mysql om dit op te slaan?
Maar die slaat de datum in xxxx-xx-xx formaat op. Dan heb je toch niks meer aan de timestamp?quote:Op donderdag 6 september 2007 21:14 schreef Farenji het volgende:
[..]
Timestamp lijkt me op zich geen geheel onlogische keuze.
int(11)quote:Op donderdag 6 september 2007 20:28 schreef markiemark het volgende:
ik heb in php een timestamp gemaakt. kijk:
[ code verwijderd ]
welk datatype moet ik gebruiken in mysql om dit op te slaan?
dat is datetime geloof ik.quote:Op donderdag 6 september 2007 21:17 schreef wonderer het volgende:
[..]
Maar die slaat de datum in xxxx-xx-xx formaat op. Dan heb je toch niks meer aan de timestamp?
Timestamp ook. Die fout maakte ik namelijk zelf ookquote:Op donderdag 6 september 2007 21:27 schreef super-muffin het volgende:
[..]
dat is datetime geloof ik.
Intern wordt ie als timestamp opgeslagen, itt tot een datetime. Een timestamp wordt als een datum weergegeven maar je kan er gewoon mee rekenen zoals je met timestamps kan.quote:Op donderdag 6 september 2007 21:17 schreef wonderer het volgende:
[..]
Maar die slaat de datum in xxxx-xx-xx formaat op. Dan heb je toch niks meer aan de timestamp?
of je zet een now() in je datetime en haat het terug met strtotimequote:Op vrijdag 7 september 2007 14:42 schreef colourAgga het volgende:
Je kan inderdaad zoals ik eerder al zei net zo goed (of beter) een int(11) gebruiken. Daar sla je dan je time() in op. Dat is handiger dan DATE, DATETIME en TIMESTAMP aangezien je meer met de tijden kan doen. TIMESTAMP kun je beter niet gebruiken omdat de resultaten nogal verschillen tussen verschillende MySQL versies en de modi waarin een MySQL server draaitZie ook de MySQL Manual.
Of je doet gewoon opslaan als integer en dan ben je die extra handelingen kwijtquote:Op zaterdag 8 september 2007 09:37 schreef PiRANiA het volgende:
[..]
of je zet een now() in je datetime en haat het terug met strtotime
1 |
quote:Op zaterdag 8 september 2007 23:34 schreef The_Terminator het volgende:
Weet iemand toevallig hoe ik de topics hier op Fok uit een bepaald sub-forum kan rippen? Dus topic naam en ID in een array.
Ik ben al met preg_match_all aan het vogelen geweest maar weet niet welke pattern ik moet gebruiken om de topics te rippen. Het ophalen van de data gaat dmv het donwloaden van de index van een forum naar een txt bestand, vervolgens lees ik dit betand en plaats het in een string. De string bevat dus de gehele HTML waar de pagina uit bestaat.
Wat ik wil rippen is het volgende:
[ code verwijderd ]
En bovenstaande dus voor alle topics in het KLB subforum onderverdeeld in een array.
1 2 3 4 5 6 7 8 9 10 | $forum_html = file_get_contents('http://forum.fok.nl/forum/' . $forum_id); $ex = explode('topic(',$forum_html); unset($ex[0],$ex[(count($ex)-1)]); foreach($ex as $key => $value) { $ex2 = explode(',',$value); $topic_list[$row['forum']][intval($ex2[0])] = $ex2[1]; } ?> |
Werkt perfect, thanksquote:Op zaterdag 8 september 2007 23:51 schreef WyriHaximus het volgende:
[..]
[ code verwijderd ]
Enjoy($forum_id moet het forum id zijn van het subforum wat je wilt uilezen
.)
Niet perfect, want hij split bijvoorbeeld ook op komma's die in strings (de topic titel) voorkomenquote:
Mwoh, dat kan ik wel aanpassen. De basis is er in iedergevalquote:Op zondag 9 september 2007 00:17 schreef SuperRembo het volgende:
[..]
Niet perfect, want hij split bijvoorbeeld ook op komma's die in strings (de topic titel) voorkomen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function customexplode($invoer, $max){ $uitnr=0; $startpos=0; do { preg_match('/[^\',][^,\']*|\'([^\'\\\\]|\\\\[\s\S])*\'/', substr($invoer, $startpos), $matches, PREG_OFFSET_CAPTURE); if (count($matches)>0) { $t = $matches[0][0]; if (substr($t,0,1)=="'") $t=substr($t,1,strlen($t)-2); $uitvoer[$uitnr]=$t; $startpos += $matches[0][1] + strlen($matches[0][0]); $uitnr++; } } while ((count($matches)>0) && ($uitnr <= $max)); return $uitvoer; } ?> |
Daar zeg je idd watquote:Op zondag 9 september 2007 00:17 schreef SuperRembo het volgende:
[..]
Niet perfect, want hij split bijvoorbeeld ook op komma's die in strings (de topic titel) voorkomen
Je zou ook de php eval() kunnen gebruiken, dat scheelt een boel gekloot met regexps.quote:Op zondag 9 september 2007 10:25 schreef WyriHaximus het volgende:
Daar zeg je idd wat. De regex dinges hierboven verhelpt dat wel
.
(Wow iemand die eval() suggereerdquote:Op zondag 9 september 2007 11:05 schreef SuperRembo het volgende:
[..]
Je zou ook de php eval() kunnen gebruiken, dat scheelt een boel gekloot met regexps.
Ik denk dat preg_match_all met #\d+|'(\'|[^'])*?'# genoeg moet zijn voor een lijst van getallen en strings. (niet getest)quote:Op zondag 9 september 2007 00:55 schreef Igen het volgende:
Ai, ik heb dat ook eens gedaan. Het was een enorm gepuzzel om de juiste reguliere expressie te vinden, maar uiteindelijk toch gelukt:
[ code verwijderd ]
Er zitten wel wat rare dingen in je regexp. [\s\S] (whitespace of non-whitespace) dat is toch gewoon elk willekeurig teken? [^',][^,']* is hetzelfde als [^',]+. Je regexp zou beter leesbaar zijn als je voor de regexp zelf dubbele quotes zou gebruiken, dan hoef je de enkele quotes in de regexp niet te escapen.quote:Op zondag 9 september 2007 11:32 schreef Igen het volgende:
Gaat dat niet fout als \\' in een string voorkomt?
Ik heb heus wel nagedacht over mijn regexp hoor!
Ik had het al op een andere manier opgelost:quote:Op zondag 9 september 2007 00:55 schreef Igen het volgende:
Ai, ik heb dat ook eens gedaan. Het was een enorm gepuzzel om de juiste reguliere expressie te vinden, maar uiteindelijk toch gelukt:
[ code verwijderd ]
Als je het 'topic(' aan het begin, en ');' aan het einde, al eraf hebt gehakt, en je dus zoiets overhoudt:
1,10,4372847328,8239,'Igen',32198,'Slecht \'topic\', enzo',0
dan kun je deze functie gebruiken om de eerste $max velden op te vragen.
Werkt perfect voor Fok!Silver, voor de topic-list en voor de topics zelf. :)
1 2 3 4 5 6 7 8 9 10 11 12 13 | $forum_html = file_get_contents('http://forum.fok.nl/forum/5'); $ex = explode('topic(',$forum_html); unset($ex[0],$ex[(count($ex)-1)]); foreach($ex as $key => $value) { $ex2 = explode(",'",$value); echo stripslashes(rtrim($ex2[1], "'")) . "<br>"; $topic_list[$row['forum']][intval($ex2[0])] = $ex2[1]; } ?> |
Nee, ik bedoel te zeggen dat je met een regular expression helemáál niet moeilijk hoeft te doen om een topicregel te matchen, omdat er maar één waarde in topic() een apostrofe kan bevatten. Je matcht dan het stuk waar de regels in voorkomen met preg_match_all() met een regex als deze:quote:Op zondag 9 september 2007 14:20 schreef Igen het volgende:
Om het bestand in regels op te delen kun je toch ook gewoon file() gebruiken, in plaats van file_get_contents() ?
Maar dan moet je nog steeds iets met elke regel doen, en daarvoor moet je die toch echt bij de juiste komma's in stukken hakken. Of begrijp ik je nu helemaal verkeerd?
Een dedicated databaseserver en een parttime crawler die afhankelijk van de situatie bij mij thuis of in Amsterdam op het datacentrum draaitquote:Op zondag 9 september 2007 19:24 schreef PiRANiA het volgende:
JeRa, dat heb je waarschijnlijk op een server draaien.
Hoe pak je dat aan? Heb je het op een lokale server?
Met een crontab.quote:En hoe zorg je dat het script blijft draaien en niet aangeroepen hoeft te worden door een browser?
Ik heb een jaar of wat geleden een framework geschreven om heel FOK! te indexeren, in eerste instantie voor een uitgebreide zoekmachine (die niet in gebruik werd genomen vanwege de nieuwe zoeken.fok.nl van Roönaän) en vervolgens voor de statistieken en andere willekeurige dingenquote:Op zondag 9 september 2007 19:31 schreef Xcalibur het volgende:
Wat doen jullie verder met die scripts btw?
Dat blocken is wat lastiger omdat mijn crawler zich bijvoorbeeld niet veel anders voordoet dan de gemiddelde niet-ingelogde bezoeker (ik stuur wat minder headers mee om zo het aantal packets mogelijk te verminderen). Ze zouden dan geen onderscheid moeten maken tussen een crawler en een bezoeker die als een gek topics aan het doorspitten isquote:Op zondag 9 september 2007 19:41 schreef Xcalibur het volgende:
Ah ok...
Dat indexeren door x-aantal man is wel suf idd, kan FOK dat soort verkeer niet blocken dan?
Volgens mij zitten die tools meestal gewoon bij je hosting pakketquote:Op maandag 10 september 2007 12:01 schreef markiemark het volgende:
Over crons.. Kan ik die dmv een php script aanmaken? En kan ik deze ook zo instellen dat ze eenmalig draaien?
Zelf zie ik geen probleem in een proxy blokkeren. Als die misbruikt word ga ik mijn site daar niet voor openstellen. Mochten users die ook achter die proxy daar problemen mee hebben dan gaan ze maar bij de eigenaar van die proxy klagen . Het handje vol bezoekers wat ik daar mee uitsluit neem ik wel voor liefquote:Op maandag 10 september 2007 13:06 schreef Igen het volgende:
Wordt lastig. Anonieme gebruikers zijn alleen te traceren met hun IP-adres, dus dan moet je voor elk IP-adres gaan bijhouden wanneer hoeveel pagina's zijn opgevraagd, en daarmee belast je de database ook weer. Bovendien heb je nog het probleem dat mensen die dezelfde proxy-server gebruiken allemaal hetzelfde IP-adres lijken te hebben, dacht ik.
En sowieso, 100 aanvragen per minuut!?
Daar kom ik niet eens in de buurt. Je zou 10 aanvragen per minuut kunnen zeggen. Maar dan krijg je weer dat mensen onterecht geblokkeerd worden omdat ze achter een proxy-server zitten, of omdat ze in Firefox ineens al hun actieve topics in een nieuwe tab openen.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |