1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $url = 'https://app.halowaypoint.com/en-us/Halo4/Ninja%20pgl/wargames/match-b5bae280fab08275'; $agent= $_SERVER['HTTP_USER_AGENT'] ; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_URL,$url); $result=curl_exec($ch); echo '<xmp>'.$result.'</xmp>'; ?> |
Idd word gelijk door geredirect naar een login. @Darkomen ff wat meer werk in stoppen door o.a. een cookie jar te gebruiken of zoiets als selenium of phantomjs te gebruiken.quote:Op maandag 1 april 2013 15:34 schreef rekenwonder het volgende:
Wat krijg je dan terug? En wat verwacht je terug te krijgen? Log je wel eerst in?
1 2 | curl_setopt($ch, CURLOPT_STDERR, fopen('php://output', 'w+')); curl_setopt($ch, CURLOPT_VERBOSE, true); |
1 | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); |
Een stat pagina.quote:Op maandag 1 april 2013 15:34 schreef rekenwonder het volgende:
Wat krijg je dan terug? En wat verwacht je terug te krijgen? Log je wel eerst in?
1 2 3 4 5 6 7 | SELECT `plaatjes`.* FROM `plaatjes` LEFT JOIN `views` ON `views`.`category` = `plaatjes`.`category` WHERE YEAR(`views`.`date`) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(`views`.`date`) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) GROUP BY `views`.`category`, `plaatjes`.`category` ORDER BY `views`.`date` DESC |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | CREATE TABLE IF NOT EXISTS `plaatjes` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `category` varchar(32) CHARACTER SET latin1 NOT NULL, `filetype` tinyint(3) unsigned NOT NULL, `filename` varchar(40) CHARACTER SET latin1 NOT NULL, `filesize` int(10) unsigned NOT NULL, `height` int(10) unsigned NOT NULL, `width` int(10) unsigned NOT NULL, `animated` enum('j','n') CHARACTER SET latin1 NOT NULL DEFAULT 'n', `views` int(10) unsigned NOT NULL, `lastview` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `category` (`category`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=DYNAMIC AUTO_INCREMENT=28350 ; -- -------------------------------------------------------- CREATE TABLE IF NOT EXISTS `views` ( `category` varchar(32) NOT NULL, `date` date NOT NULL, `tstamp` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, `views` int(10) unsigned NOT NULL, `thumbs` int(10) unsigned NOT NULL, `searches` int(10) unsigned NOT NULL, UNIQUE KEY `category` (`category`,`date`), KEY `date` (`date`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; |
1 2 | 1,SIMPLE,views,index,category,category,37,NULL,35317,Using where; Using index; Using temporary; Using f... 1,SIMPLE,plaatjes,ref,category,category,34,nvt****_anipl.views.category,17 |
Ik sla dagelijks views op basis van de categorieën. In deze views sla ik de datum, timestamp, categorie naam, aantal thumb views, image views en zoek opdrachten op. Deze wil ik gebruiken in combinatie met het plaatjes tabel. Eerst wil ik bv de beste categorieen van de laatste dag/maand opvragen en daarbij wil ik het plaatjes tabel gebruiken om een plaatje (liefst, het best bekeken plaatje) uit te kunnen lezen.quote:Op dinsdag 2 april 2013 20:56 schreef Light het volgende:
Wat probeer je precies te bereiken met je query?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT plaatjes.* FROM ( SELECT MAX(plaatjes.id) AS id, plaatjes.category, a.date_viewed FROM ( SELECT category, MAX(date) AS date_viewed FROM views WHERE date BETWEEN date_sub(CURDATE(), INTERVAL '1' month) and CURDATE() GROUP BY category ) a LEFT JOIN plaatjes ON a.category = plaatjes.category GROUP BY plaatjes.category, a.date_viewed ) b LEFT JOIN plaatjes ON b.id = plaatjes.id ORDER BY b.date_viewed DESC LIMIT 5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | <?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } function getRecordsByDate(&$db, $search = '1 DAY') { $sql = "SELECT SQL_NO_CACHE category, MAX(date) AS date_viewed FROM views WHERE date BETWEEN date_sub(CURDATE(), INTERVAL " . $search . ") and CURDATE() AND `category` != '' GROUP BY category LIMIT 5"; $db->q($sql); if ($db->rows() > 0) { $l = array(); foreach ($db->fetch() AS $k=>$v) { $l[$v['category']] = $v['date_viewed']; } if (count($l) > 0) { $sql = "SELECT `plaatjes`.* FROM `plaatjes` WHERE `category` IN ('" . implode("','", array_keys($l)) . "') GROUP BY `plaatjes`.`category` ORDER BY `plaatjes`.`views` DESC"; $db->q($sql); return $db->fetch(); } } return array(); } function getRecordsByDateOld(&$db, $search = '1 DAY') { $sql = 'SELECT SQL_NO_CACHE plaatjes.* FROM ( SELECT MAX(plaatjes.id) AS id, plaatjes.category, a.date_viewed FROM ( SELECT category, MAX(date) AS date_viewed FROM views WHERE date BETWEEN date_sub(CURDATE(), INTERVAL ' . $search . ') and CURDATE() AND `category` != \'\' GROUP BY category ) a LEFT JOIN plaatjes ON a.category = plaatjes.category GROUP BY plaatjes.category, a.date_viewed ) b LEFT JOIN plaatjes ON b.id = plaatjes.id ORDER BY b.date_viewed DESC LIMIT 5'; $db->q($sql); if ($db->rows() > 0) { return $db->fetch(); } else { return array(); } } echo '1 day old function<br />'; $time_start = microtime_float(); for ($x = 0; $x < 100; $x++) { getRecordsByDateOld($db, '1 DAY'); } echo round(microtime_float() - $time_start, 2) . " secs<br />"; echo '1 day new function<br />'; $time_start = microtime_float(); for ($x = 0; $x < 100; $x++) { getRecordsByDate($db, '1 DAY'); } echo round(microtime_float() - $time_start, 2) . " secs<br />"; echo '1 month old function<br />'; $time_start = microtime_float(); for ($x = 0; $x < 100; $x++) { getRecordsByDateOld($db, '1 MONTH'); } echo round(microtime_float() - $time_start, 2) . " secs<br />"; echo '1 month new function<br />'; $time_start = microtime_float(); for ($x = 0; $x < 100; $x++) { getRecordsByDate($db, '1 MONTH'); } echo round(microtime_float() - $time_start, 2) . " secs<br />"; |
1 2 3 4 5 6 7 8 | 1 day old function 4.63 secs 1 day new function 4.51 secs 1 month old function 33.67 secs 1 month new function 0.19 secs |
1 2 3 4 5 6 7 8 | 1 day old function 55.34 secs 1 day new function 0.19 secs 1 month old function 79.06 secs 1 month new function 0.19 secs |
Omdat je dan pas betrouwbare statistieken hebtquote:Op woensdag 3 april 2013 21:28 schreef Chandler het volgende:
why 10.000? dan is mijn systeem nog wel ff bezig...
quote:Op woensdag 3 april 2013 21:28 schreef Chandler het volgende:
why 10.000? dan is mijn systeem nog wel ff bezig...
100 keer vond ik anders toch aardig wat, zijn dus in totaal 400 queries geweestquote:Op woensdag 3 april 2013 21:33 schreef Rockfire het volgende:
Omdat je dan pas betrouwbare statistieken hebtEén keer een query uitvoeren zegt nog heel weinig over de gemiddelde tijd.
Ik vind 0.19 seconden niet bijzonder snel maar die andere functies wel erg traag. Volgens mij mis je her en der wat indexen.quote:Op woensdag 3 april 2013 21:21 schreef Chandler het volgende:
Ik heb een testje gedaan, en wat blijkt 2 queries zijn sneller
[ code verwijderd ]
uitkomst:
[ code verwijderd ]
met name de maand functie is extreem snel.. waarom? geen idee... nu eens ff online testen.
Online versie vertelt nog een mooier verhaal.
[ code verwijderd ]
In mijn lokale versie zijn er nog geen statistieken van 'vandaag' / 'gisteren' online wel.. Toch raar want vele mensen zeggen dat 1 query altijd sneller is dan 2........
Vele mensen zeggen dat je nooit vooraf moet optimaliseren om datsoort (veelal verkeerde) aannames te voorkomen.quote:Op woensdag 3 april 2013 21:21 schreef Chandler het volgende:
Ik heb een testje gedaan, en wat blijkt 2 queries zijn sneller
Toch raar want vele mensen zeggen dat 1 query altijd sneller is dan 2........
Juist, maar dit was een oplossing voor de vorige query zie code (verbetering van 10 seconden naar 1,5)quote:Op woensdag 3 april 2013 23:37 schreef StM het volgende:
Dat getRecordsByDateOld VEEL langzamer is, is niet gek want je sorteert daar op een virtuele column die het resultaat is van een aggregation in een subquery. Hij kan daar dus nooit een index op toepassen. Sowieso geven de query's ook geen identieke resultaten waardoor je nooit eerlijk kan vergelijken.
1 2 3 4 5 6 7 | SELECT `plaatjes`.* FROM `plaatjes` LEFT JOIN `views` ON `views`.`category` = `plaatjes`.`category` WHERE YEAR(`views`.`date`) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(`views`.`date`) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) GROUP BY `views`.`category`, `plaatjes`.`category` ORDER BY `views`.`date` DESC |
Correct, maar in sommige gevallen is het juist wel handig anders kun je heel veel werk dubbel / over gaan doen...quote:Op donderdag 4 april 2013 00:47 schreef KomtTijd... het volgende:
Vele mensen zeggen dat je nooit vooraf moet optimaliseren om datsoort (veelal verkeerde) aannames te voorkomen.
Waar is de filesort op? Zou je een volledige explain hier willen plaatsen? (Of heb ik die gemist...)quote:Op donderdag 4 april 2013 10:19 schreef Chandler het volgende:
[..]
Juist, maar dit was een oplossing voor de vorige query zie code (verbetering van 10 seconden naar 1,5)
[ code verwijderd ]
Het heeft gezorgd voor een versnelling maar ook niet veel zeg maar, bovenstaande query zou goed moeten werken aangezien de indexes goed staan maar werkt toch met een filesorten de 2 losse queries zijn vele malen sneller dus!
[..]
Correct, maar in sommige gevallen is het juist wel handig anders kun je heel veel werk dubbel / over gaan doen...
1 2 | 1,SIMPLE,views,index,category,category,37,NULL,35317,Using where; Using index; Using temporary; Using f... 1,SIMPLE,plaatjes,ref,category,category,34,nvt****_anipl.views.category,17 |
1 | <?phpPHP include "menu.txt" ; ?> |
Dit is juist een goede manier. Met includes kan je dan (zoals jij al doet gok ik) het menu op elke pagina includen en hem hetzelfde laten zijn..quote:Op vrijdag 5 april 2013 14:48 schreef gerrit098 het volgende:
Ik ben momenteel een website aan het schrijven in HTML(5). nu wilde ik graag dingen uit .txt gaan "includen"
na wat zoek en pruts werk ben ik er al achter dat je als je je html bestand .php noemt gewoon blijft werken en dus
[ code verwijderd ]
naar behoren werkt.
mijn vraag is blijft dit in de toekomst ook handig of zitten hier ook nadelen aan in de toekomst???
1 | <?php include 'menu.txt'; ?> |
Hoe bedoel je dat? Of dat in toekomstige versies van PHP zal blijven werken? Daar hoef je je geen zorgen om te maken.quote:Op vrijdag 5 april 2013 14:48 schreef gerrit098 het volgende:
mijn vraag is blijft dit in de toekomst ook handig of zitten hier ook nadelen aan in de toekomst???
Ik doelde er meer op of alles wat je in .html gebruikt ook blijft werken zodra je bestand .php gaat noemen.quote:Op vrijdag 5 april 2013 15:36 schreef KomtTijd... het volgende:
[..]
Hoe bedoel je dat? Of dat in toekomstige versies van PHP zal blijven werken? Daar hoef je je geen zorgen om te maken.
Of dat je zo een praktisch bruikbare website zit te maken? Als je dat wilt kun je beter gewoon een CMS installeren.
[offtopic] probeer CMS made simple.quote:Op vrijdag 5 april 2013 17:51 schreef gerrit098 het volgende:
[..]
Ik doelde er meer op of alles wat je in .html gebruikt ook blijft werken zodra je bestand .php gaat noemen.
maar blijkbaar zal dat geen problemen geven.
Ik heb al "veel" gelezen over CMS maar ik kom dan altijd uit op wp joomla of drupal. en dan krijg ik het niet voor mekaar om een "mooie" site te maken.
wat ik het (denk ik) het liefste heb is een site waar txt bestanden geinclude zijn zodat iemand anders makkelijk de tekst kan aanpassen....
daar ben ik nu dat ook mee bezig en probeer nu een php script te vinden die dit online doen kan, mischien dat iemand hier daar tips over heeft????
Verder wil ik een activiteiten kalander maken waar activiteiten die al geweest zijn automatisch verdwijnen.
iemand daar tips voor???
[offtopic] of probeer wordpressquote:Op vrijdag 5 april 2013 18:06 schreef KomtTijd... het volgende:
[..]
[offtopic] probeer CMS made simple.
Ik heb zelf ook zo'n CMS gebouwd voor een aantal klanten. Als je een CMS wilt maken waarbij klanten hun website aan kunnen passen zoals je in Word werkt (dus met knopjes voor dikgedrukte tekst, onderstreepte tekst, verschillende tekstkleuren enzo) dan moet je naast PHP ook Javascript leren. Met PHP maak je dan gebruik van echo en file_get_contents (niet include, ik leg zo uit waarom), een PHP script dat BB code omzet in HTML (dus dat [ b]tekst[/b ] <b>tekst</b> wordt), een loginscript met cookies en natuurlijk een PHP script dat de tekstbestanden aanpast (fopen, fwrite, fclose).quote:Op vrijdag 5 april 2013 17:51 schreef gerrit098 het volgende:
[..]
Ik doelde er meer op of alles wat je in .html gebruikt ook blijft werken zodra je bestand .php gaat noemen.
maar blijkbaar zal dat geen problemen geven.
Ik heb al "veel" gelezen over CMS maar ik kom dan altijd uit op wp joomla of drupal. en dan krijg ik het niet voor mekaar om een "mooie" site te maken.
wat ik het (denk ik) het liefste heb is een site waar txt bestanden geinclude zijn zodat iemand anders makkelijk de tekst kan aanpassen....
daar ben ik nu dat ook mee bezig en probeer nu een php script te vinden die dit online doen kan, mischien dat iemand hier daar tips over heeft????
Ik had die 100x gemist. 0.0019 is best goed.quote:Op woensdag 3 april 2013 23:24 schreef Chandler het volgende:
De indexen kun je inzien in posts hierboven, daar moet volgens mij weinig mis mee zijn.
0.19 voor 100x deze query uitvoeren? oftewel 0.0019? best snel toch?
1 2 3 4 | <?php setlocale(LC_ALL, 'nl_NL'); var_dump(strtotime('zaterdag 6 april 2013')); ?> |
Naar mijn weten is setlocale() voor output, niet voor input.quote:Op zaterdag 6 april 2013 15:18 schreef d4v1d het volgende:
[ code verwijderd ]
Waarom geeft dat FALSE terug en niet een timestamp? Dacht dat dat zo ging..
Dat dacht ik dus ookquote:Op zaterdag 6 april 2013 14:07 schreef Light het volgende:
[..]
Ik had die 100x gemist. 0.0019 is best goed.
Overigens vind ik je microtime_float() functie wat onnodig. Gebruik gewoon mircotime(true) als je de tijd als float wilt.
Dat is het geheim van de smid he.quote:Op zondag 7 april 2013 19:21 schreef Chandler het volgende:
Iemand die bekend is met de techniek achter de facebook timeline en hoe dat in zijn werk gaat? eventueel tutorial? zou daar graag het fijne van willen weten.
Gewoon zelf opzetten zo lastig is dat toch niet?quote:Op zondag 7 april 2013 19:21 schreef Chandler het volgende:
Iemand die bekend is met de techniek achter de facebook timeline en hoe dat in zijn werk gaat? eventueel tutorial? zou daar graag het fijne van willen weten.
Ik wil eerst meer informatie voordat ik ga scriptenquote:Op maandag 8 april 2013 10:45 schreef WyriHaximus het volgende:
Gewoon zelf opzetten zo lastig is dat toch niet?Desnoods bouw je een mediator model waar je de timeline uit trekt en daarna alle related entries opvraagt?
Het gaat mij voornamelijk om het combineren van gegevens (foto's, video's, agenda punten, evenmenten etc etc etc) en die dan met 'reacties' laten weergeven.quote:Op maandag 8 april 2013 10:52 schreef Boze_Appel het volgende:
Even een tutorial van één van de grootste website ter wereld.![]()
Ze zetten trouwens praktisch al hun php om in hiphop-php.
Verder gebruiken ze een combo van push & pulls. De wall zelf gaat via pulls en de chatbalk via pushes bijvoorbeeld. De techniek is allemaal niet zo ingewikkeld, het is meer de enorme hoeveelheid data die het hele Facebook-gebeuren wat ingewikkeld maakt.
Je hoeft de architectuur van Facebook natuurlijk niet te gebruiken om dit voor elkaar te krijgen. Als je alles op 1 server wil draaien, kom je met een paar simpele tabellen voor content en reacties al een heel eind. Wat Facebook voor speciaal maakt is de schaal en het feit dat ze vele datacenters over de wereld hebben verspreid die gegevens met elkaar syncen. Maar voor een bescheiden aantal bezoekers heb je zo'n setup helemaal niet nodig natuurlijk.quote:Op maandag 8 april 2013 11:20 schreef Chandler het volgende:
[..]
Het gaat mij voornamelijk om het combineren van gegevens (foto's, video's, agenda punten, evenmenten etc etc etc) en die dan met 'reacties' laten weergeven.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | CREATE TEMPORARY TABLE tmp engine=memory SELECT record_id FROM data LEFT JOIN assets ON data.asset_id = assets.asset_id WHERE uitgelezen = 0 AND assets.active = 1 ORDER BY record_id LIMIT 1000; SELECT * FROM data WHERE record_id IN (SELECT record_id FROM tmp) ; UPDATE data SET uitgelezen = 1 WHERE record_id IN (SELECT record_id FROM tmp) ; DROP TEMPORARY TABLE IF EXISTS tmp; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | CREATE TEMPORARY TABLE tmp engine=memory SELECT <<alle benodigde records>>, 1 AS in_tmp FROM data LEFT JOIN assets ON data.asset_id = assets.asset_id WHERE uitgelezen = 0 AND assets.active = 1 ORDER BY record_id LIMIT 1000; SELECT * FROM tmp ; UPDATE data LEFT JOIN tmp ON data.record_id = tmp.record_id SET uitgelezen = 1 WHERE in_tmp = 1 ; DROP TEMPORARY TABLE IF EXISTS tmp; |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |