2 weken geleden had ik een topic dat mijn database erg langzaam was.
zie topic:
[topic=431019]
Aan het einde zei ik ook dat ik de nieuwe code zou plaatsen.
Het is me nu gelukt om het veel sneller te laten werken.
Ik heb het getest met 75 pagina's en het duurde ongeveer een halve minuut voordat alles geindexeerd was (in win98).
Ik heb de tabel structuur gebruikt die Grum vermelde, met dank dus aan Grum en alle andere tweakers die me geholpen hebben. (Alleen datum is geen date, want ik gebruik de tijd dat het bestand gemaakt is en niet wanneer die erin gezet wordt. Zo kan ik later controleren of het bestand gewijzigd of niet.)
Helaas kan je geen subquery's gebruiken in MySQL dus er staan nog veel query's in.
Zien jullie nog mogelijkheden om het sneller te maken, graag melden
zie topic:
[topic=431019]
Aan het einde zei ik ook dat ik de nieuwe code zou plaatsen.
Het is me nu gelukt om het veel sneller te laten werken.
Ik heb het getest met 75 pagina's en het duurde ongeveer een halve minuut voordat alles geindexeerd was (in win98).
Ik heb de tabel structuur gebruikt die Grum vermelde, met dank dus aan Grum en alle andere tweakers die me geholpen hebben. (Alleen datum is geen date, want ik gebruik de tijd dat het bestand gemaakt is en niet wanneer die erin gezet wordt. Zo kan ik later controleren of het bestand gewijzigd of niet.)
Helaas kan je geen subquery's gebruiken in MySQL dus er staan nog veel query's in.
Zien jullie nog mogelijkheden om het sneller te maken, graag melden
PHP:
1
| <?//zet de tijd limiet op oneindig.set_time_limit(0);$dbname="";$user="";$password="";$server="localhost";//Kontakt maken met de database.mysql_connect($server,$user,$password);mysql_select_db($dbname);function BestandenInDir(){ //Global van $HTMLpages maken, zodat deze teruggegeven kan worden na de functie. Global $HTMLpages; //beginnende mappen om door te zoeken. $dir = array("../Web site/2vianen"); //$dir = array("../test"); //telt hoeveel mappen er doorgezocht worden. $teller = count($dir); //maak array HTMLpages aan. $HTMLpages = array(); for($dirI=0; $dirI<$teller; $dirI++) { //opent de map. $opendir = opendir($dir[$dirI]); //gaat alle bestanden in de map na. while($filename = readdir($opendir)) { //gebruikt de . & .. & ws_ftp bestanden niet. if(($filename!=".")&&($filename!="..")&&($filename!="WS_FTP.LOG")) { //als het een map is, word deze toegevoegd aan $dir. if(is_dir("$dir[$dirI]/$filename")) { array_push($dir, "$dir[$dirI]/$filename"); } else { //hier worden alleen html & htm bestanden doorgelaten. if (eregi(".*\.html$", $filename)||eregi(".*\.htm$", $filename)) { //in deze array komen alle HTML bestanden te staan. array_push($HTMLpages, "$dir[$dirI]/$filename"); } } } } //dir sluiten. closedir($opendir); //telt opnieuw, want er kan een nieuwe map begezet zijn. $teller = count($dir); }}function URLcontrole($HTMLpages){ Global $NieuwUrl; //maak array Nieuw aan. $NieuwUrl = array(); //Hier worden de doorgelaten pagina's geteld. $URLteller = count($HTMLpages); for($i=0; $i<$URLteller; $i++) { $url=mysql_query("SELECT Id FROM pages WHERE Url='$HTMLpages[$i]'") or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$url); //tellen hoeveel er gevonden zijn. $rtel = mysql_num_rows($url); if($rtel==0) { //In deze array komen alle nieuwe pagina's te staan. array_push($NieuwUrl, "$HTMLpages[$i]"); } }}function SleutelWoorden($url){ //bestand openen en code opslaan. $bestand = "$url"; $fd = fopen ($bestand, "r"); $code = fread ($fd, filesize ($bestand)); fclose ($fd); //de titel los in variabele zetten. preg_match_all ("!\<title>(.+?)</title>!i", $code, $matches); for ($i=0; $i< count($matches[0]); $i++) { $titel = $matches[1][$i]; //alle gevaarlijk tekens backspacen \ $titel = addslashes($titel); } $code = ereg_replace("(<head>)(.*)(</head>)", "<head> </head>", $code); //alleen de teskt tussen </head> en </body> gebruiken. preg_match_all ("!\</head>(.+?)</body>!i", $code, $matches); for ($i=0; $i< count($matches[0]); $i++) { $code = $matches[1][$i]."\n"; } $filesize = filesize("$url"); $date = filemtime("$url"); //HTML codes verwijderen $code = strip_tags($code); //omshrijving voor onder de zoekresultaten opslaan. $omschrijving = substr($code, 0, 300); //alle gevaarlijk tekens backspacen \ $omschrijving = addslashes($omschrijving); //De url + info opslaan in db. $query = "insert into pages (Url,Title,Description,Size,Datum) values ('$url','$titel','$omschrijving','$filesize','$date')"; mysql_query($query) or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$query); //De AutoIncrement integer die de url gekregen heeft, wordt hier opgeslagen. $UrlId = mysql_insert_id(); //Alles onderscore maken $code = strtolower($code); //alle gevaarlijk tekens backspacen \ $code = addslashes($code); //alle vage go-live shit eruit halen $code = str_replace("&agrave;", "à", $code); $code = str_replace("&aacute;", "á", $code); $code = str_replace("&acirc;", "â", $code); $code = str_replace("&auml;", "ä", $code); $code = str_replace("&egrave;", "è", $code); $code = str_replace("&eacute;", "é", $code); $code = str_replace("&ecirc;", "ê", $code); $code = str_replace("&euml;", "ë", $code); $code = str_replace("&igrave;", "ì", $code); $code = str_replace("&iacute;", "í", $code); $code = str_replace("&icirc;", "î", $code); $code = str_replace("&iuml;", "ï", $code); $code = str_replace("&ograve;", "ò", $code); $code = str_replace("&oacute;", "ó", $code); $code = str_replace("&ocirc;", "ô", $code); $code = str_replace("&ouml;", "ö", $code); $code = str_replace("&ugrave;", "ù", $code); $code = str_replace("&uacute;", "ú", $code); $code = str_replace("&ucirc;", "û", $code); $code = str_replace("&uuml;", "ü", $code); $code = str_replace("&yacute;", "ý", $code); $code = str_replace("&yuml;", "ÿ", $code); //alle nutteloze tekens zoals o.a. spaties en enters weghalen $code = preg_replace('![[:space:]]+!', ',', $code); //code filteren $filter = array(",de,", ",het,", ",een,", ",van,", ",in,", ",op,", ",en,", ",er,", ",dan,", ",maar,", ",als,", ",heeft,", ",wel,", ",niet,", ",aan,", ",dat,", ",is,", ",je,", ",ik,", ",wij,", ",we,", ",onze,", ",jullie,", ",ons,", ",hij,", ",zij,", ",mij,", ",", ".", "!", "?", ":", "\"", "(", ")", ",werd,", ",kunt,", ",per,", ",geen,", ",te,", ",kan,", ",nog,", ",me,", ",wordt,", ",was,", ",gaan,", ",met,", ",die,", ",hebben,", ",voor,", ",willen,", ",maken,", ",waarna,", ",om,", ",ben,", ",alle,", ",bij,", ",zijn,", ",door,", ",men,", "&#148;", "&#146;", ";", ",wie,", ",ze,", ",-,", ",ja,", ",nee,", ",ook,", ",had,", ",al,", ",mijn,", ",heb,", ",betreft,", ",wat,", ",soms,", ",kontakt,", ",edities,", ",bv,", ",ter,", ",na,", ",blijft,", ",over,", ",komt,", ",vind,", ",vindt,", ",u,", ",der,", ",moeten,", ",worden,", ",mee,", ",heel,", ",gaat,", ",zo,", "/", ",wil,", ",tot,", ",ene,", ",legt,", ",uit,", ",daar,", ",mag,", ",wanneer,", ",spreekt,", ",vanaf,", ",neer,", ",nu,", ",-,", ",_,", ",,", ",deze,", ",doet,", ",ziet,", ",deels,", ",af,", ",ervan,", ",of,", ",andere,", ",waarin,", ",zitten,", ",zorgt,", ",zoals,", ",zich,", ",zélf,", ",gebruikt,", ",zodat,", ",naar,", ",dit,", ",voordat,", ",doordat,"); //de woorden filteren uit filter 1. for($i=0; $i<count($filter); $i++) { $code = str_replace($filter[$i], ",", $code); } //van een string een array maken. $array1 = explode(",", $code); //alle dubbele waardes eruit halen. $array2 = array_unique($array1); //alle lege velden weghalen. $naarDB = array_values(array_unique($array2)); //Tellen hoeveel items en in de array staan. $tellerWord = count($naarDB); for($WordId = 0; $WordId < $tellerWord; $WordId++) { //hier word gecontroleerd of het woord in de datbase staat. $url=mysql_query("SELECT Id FROM keywords WHERE Word='$naarDB[$WordId]'") or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$url); //tellen hoeveel er gevonden zijn. $WordTel = mysql_num_rows($url); //keyword staat niet in DB. if($WordTel==0) { //Keyword word toegevoegd aan DB. $query = "insert into keywords (Word) values ('$naarDB[$WordId]')"; mysql_query($query) or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$query); //De AutoIncrement integer die het woord gekregen heeft, wordt hier opgeslagen. $WordId = mysql_insert_id(); //Combinatie url en woord in DB zetten. $query = "insert into pagekeywords (PageId,WordId) values ('$UrlId','$WordId')"; mysql_query($query) or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$query); } else { //De ID van het woord opvragen. while ($row = mysql_fetch_array($url)) { $WordId2 = $row[Id]; } //Combinatie url en woord in DB zetten. $query = "insert into pagekeywords (PageId,WordId) values ('$UrlId','$WordId2')"; mysql_query($query) or die ("ack! query failed: " ."<li>errorno=".mysql_errno() ."<li>error=".mysql_error() ."<li>query=".$query); } }}BestandenInDir();URLcontrole($HTMLpages);//Controle of er wel nieuwe pagina's zijn.if(empty($NieuwUrl)){ print "Er zijn geen nieuwe pagina's.";}else{ $tellerUrl = count($NieuwUrl); //Array $UrlId uitlezen en per pagina function SleutelWoorden oproepen. for($UrlId = 0; $UrlId < $tellerUrl; $UrlId++) { SleutelWoorden($NieuwUrl[$UrlId]); } print "Er zijn ".$tellerUrl." pagina's geupload.";}print "<br>einde";?> |