abonnement Unibet Coolblue Bitvavo
  zondag 9 september 2007 @ 11:11:15 #276
84926 WyriHaximus
Release the hounds smithers!
pi_53045527
quote:
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.
(Wow iemand die eval() suggereerd , normaal word je afgeschoten als je er al over begint .) Is ook een mogelijkheid. Waarom niet gelijk een API in het forum zelf, dat zou nog makkelijker worden .
phluphy for president!
pi_53045747
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 ]
Ik denk dat preg_match_all met #\d+|'(\'|[^'])*?'# genoeg moet zijn voor een lijst van getallen en strings. (niet getest)
[edit]gestest en werkt niet goed

[ Bericht 4% gewijzigd door SuperRembo op 09-09-2007 11:37:53 ]
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_53045784
Gaat dat niet fout als \\' in een string voorkomt?

Ik heb heus wel nagedacht over mijn regexp hoor!

[ Bericht 59% gewijzigd door #ANONIEM op 09-09-2007 11:34:16 ]
pi_53046032
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!
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.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_53046241
Klopt allemaal als een bus.
Ik wist dat hij niet de schoonheidsprijs verdient. Het was de eerste keer dat ik een reguliere expressie moest gebruiken. Bedankt voor je uitleg wat beter kan!

[ Bericht 2% gewijzigd door #ANONIEM op 09-09-2007 11:59:16 ]
pi_53047564
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. :)
Ik had het al op een andere manier opgelost:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    $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];
    }
?>


Dit levert de output die ik nodig heb.
pi_53047895
Niet helemaal correct. Als een TopicTitel een , op het einde heeft dan wordt die ook afgehakt.
pi_53047914
Ik snap niet zo waar het probleem in zit bij het matchen van die topics. Voor zover ik zie is er maar één string in elke regel die mogelijk een apostrofe kan bevatten, dus als je een regular expression schrijft die netjes de hele regel matcht (van begin tot eind!) moet je toch wel iets bizars verzinnen wil dat fout gaan
pi_53048181
Mijn programma heeft al meer dan 550.000 topics probleemloos verwerkt, dus mijn code werkt prima.

Voor het verwerken van de posts in een topic werkt het niet zo fijn. Als de berichttekst heel erg lang is, bijvoorbeeld als iemand een hele mooie OP heeft gemaakt, dan verslikt preg_match zich en crasht PHP.

Vandaar ook de $max parameter.
pi_53048474
Die van mij meer dan een miljoen topics en 50 miljoen posts, dus ik weet echt wel waar ik het over heb hoor. Punt is dat het niet gaat om wie de langste heeft, maar over hoe je over een probleem denkt ik vraag me dan ook af waarom er zo gezeken wordt op een mogelijke apostrofe en het splitten op komma's terwijl je simpelweg een preg_match_all() kunt gebruiken om zo elke regel van begin tot eind (^ ... $) te matchen, zonder problemen
pi_53048869
Ik geloof heel graag dat jij weet waar je het over hebt.

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?
pi_53049051
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?
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:

^topic\((\d+),(\d+),.......,(\d+),'(.*)',(\d+),....\);$

Et voila, je krijgt een associatieve array met daarin alle topics en hun eigenschappen. Geen gedoe met aparte regels en geen gedoe met komma's of apostrofes.
pi_53049596
Ach so. Da's inderdaad heel lekker simpel.

Om posts in een topic te verwerken is het alleen niet geschikt, want de signature kan ook een apostrof bevatten. Maar goed, zolang preg_match soms crasht bij hele lange strings, werkt mijn methode net zo slecht, en als het toch alleen om topic-lists gaat is een simpele methode natuurlijk altijd beter.

[ Bericht 11% gewijzigd door #ANONIEM op 09-09-2007 14:53:10 ]
  zondag 9 september 2007 @ 19:24:22 #289
136730 PiRANiA
All thinking men are atheists.
pi_53055488
JeRa, dat heb je waarschijnlijk op een server draaien.
Hoe pak je dat aan? Heb je het op een lokale server?
En hoe zorg je dat het script blijft draaien en niet aangeroepen hoeft te worden door een browser?
pi_53055590
quote:
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?
Een dedicated databaseserver en een parttime crawler die afhankelijk van de situatie bij mij thuis of in Amsterdam op het datacentrum draait (op 2 verschillende machines, dat wel).
quote:
En hoe zorg je dat het script blijft draaien en niet aangeroepen hoeft te worden door een browser?
Met een crontab.
pi_53055682
Wat doen jullie verder met die scripts btw?
pi_53055738
Je kunt PHP gewoon van de commandoregel starten.

Windows:
C:> php mijnscript.php

UNIX:
$ php mijnscript.php

Onder UNIX heb je het programma 'cron'. Daarmee kun je het script dan op gestelde tijden laten uitvoeren. De uitvoer wordt dan per e-mail opgestuurd.
pi_53055772
quote:
Op zondag 9 september 2007 19:31 schreef Xcalibur het volgende:
Wat doen jullie verder met die scripts btw?
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 dingen

Echter vind ik wel dat het gebruik ontzettend ingeperkt dient te worden ten behoeve van de databaseload. Er zijn naast mij meer mensen bezig met het indexeren, en ik was ook niet de eerste. Ik doe er zelf al alles aan om de load zo veel mogelijk te verspreiden en te concentreren op de minst drukke momenten op het forum, maar het is eigenlijk onzinnig dat er 20 man alle subfora en topics binnen trekken.
pi_53055969
Ah ok ...

Dat indexeren door x-aantal man is wel suf idd, kan FOK dat soort verkeer niet blocken dan?
pi_53056038
quote:
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?
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 is

Maar wat dat betreft zou er gewoon een dedicated server bij FOK! zelf geregeld moeten kunnen worden voor alle statistieken en zoekfunctionaliteit, en iemand die zin heeft dat ding softwarematig te onderhouden.
pi_53070068
Over crons.. Kan ik die dmv een php script aanmaken? En kan ik deze ook zo instellen dat ze eenmalig draaien?
Amsterdam, stad van hash en coke,
Waar de vrouwen zich vrouwelijk gedragen..
En de mannen ook..
  maandag 10 september 2007 @ 12:03:19 #297
107951 JortK
Immer kwaliteitsposts
pi_53070099
quote:
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?
Volgens mij zitten die tools meestal gewoon bij je hosting pakket
  maandag 10 september 2007 @ 12:49:39 #298
136730 PiRANiA
All thinking men are atheists.
pi_53071112
over dat blocken, je zou natuurlijk maximaal 100 paginaopvragingen per minuut in kunnen stellen oid...
pi_53071393
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.

[ Bericht 13% gewijzigd door #ANONIEM op 10-09-2007 13:08:02 ]
  maandag 10 september 2007 @ 13:18:34 #300
84926 WyriHaximus
Release the hounds smithers!
pi_53071658
quote:
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.
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 lief .
phluphy for president!
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')