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 | <?php class statsOutputException extends Exception { private $error_id = 0; # intern numeriek id van de fout private $error_vars = array(); # array met fout eigenschappen public function __construct($error_params, $code = 0, Exception $previous = null) { # check of het een array met waarden betreft if(is_array($error_params)) { $this->error_id = isset($error_params['id']) ? $error_params['id'] : null; $this->error_vars = (isset($error_params['vars']) && is_array($error_params['vars'])) ? $error_params['vars'] : array(); }else{ # input is string of int, handel op de normale manier af $this->error_id = $error_params; } # roep Exception contructor aan parent::__construct($this->error_id, $code, $previous); } # geeft de vars terug welke de foutcode aanvullen met eventuele extra gegevens public function getErrorVars() { return $this->error_vars; } } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml_version "1.0" encoding="UTF-8" ?> <message> <messageheader> <debug>false</debug> <msgtype>incoming</msgtype> <msgversion>1.0</msgversion> <msgidentifier></msgidentifier> <errorcode>0</errorcode> <errorcodedescription>ok</errorcodedescription> <msgdatetime>2014-04-18T11:02:55</msgdatetime> </messageheader> <messagebody> <clip>200</clip> <did></did> <extension>200</extension> <prefix>Roy</prefix> </messagebody> </message> |
file_get_contents("php://input") ?quote:Op vrijdag 18 april 2014 11:06 schreef wobbel het volgende:
Helpik heb weer eens iets raars nodig. Het is mij ooit al gelukt, maarja waarom zou je zoiets dan bewaren.
Vanaf een leverancier wordt er naar ons XML gepusht (dmv POST) naar http://server.tld/test.php. Dit gebeurd zonder variable naam.
[ code verwijderd ]
Hoe kan ik dit met PHP afvangen? Een foreach met alle POSTS vars blijft angstvallig leeg.
Waarom gebruik je niet gewoon Disqus zelf?quote:Op zondag 20 april 2014 23:56 schreef pascal08 het volgende:
Ik ben op zoek naar een PHP library waarmee ik een soort mini-forumpje kan maken, zonder veel poespas, zoals phpBB.
Een beetje dit idee:
[ afbeelding ]
Ik wil het gebruiken als een soort berichtenprikbord waar iedereen berichtjes op kan plaatsen. Dus geen commentsystem.
Ongeveer wel ja.quote:Op maandag 21 april 2014 09:35 schreef Swetsenegger het volgende:
Dus eigenlijk wil je een gastenboek?
Omdat daar een heel gebeuren aan vastzit wat ik helemaal niet nodig heb.quote:Op maandag 21 april 2014 09:34 schreef Tijn het volgende:
[..]
Waarom gebruik je niet gewoon Disqus zelf?
Valt wel mee toch? Gewoon een accountje maken, includen op de pagina waar je het hebben wil en klaar is keesquote:Op maandag 21 april 2014 15:08 schreef pascal08 het volgende:
[..]
Omdat daar een heel gebeuren aan vastzit wat ik helemaal niet nodig heb.
Accountje aanmaken is voor veel mensen een dergelijke grote stap dat ze het maat laten zitten. Leuk voorbeeld is de case van Amazon die het account aanmaken niet meer verplicht stelde vooraf de aankoop.quote:Op maandag 21 april 2014 21:45 schreef Tijn het volgende:
[..]
Valt wel mee toch? Gewoon een accountje maken, includen op de pagina waar je het hebben wil en klaar is kees
Ik bedoelde de moeite die het kost om het te installeren. Reageren kan volgens mij ook zonder account.quote:Op dinsdag 22 april 2014 09:03 schreef Maringo het volgende:
[..]
Accountje aanmaken is voor veel mensen een dergelijke grote stap dat ze het maat laten zitten. Leuk voorbeeld is de case van Amazon die het account aanmaken niet meer verplicht stelde vooraf de aankoop.
Dat is gewoon niet wat ik zoek. Ik heb zelf inmiddels al een code geschreven. Kostte uiteindelijk minder moeite dan een geschikte library vinden.quote:Op maandag 21 april 2014 21:45 schreef Tijn het volgende:
[..]
Valt wel mee toch? Gewoon een accountje maken, includen op de pagina waar je het hebben wil en klaar is kees
quote:Op dinsdag 22 april 2014 19:51 schreef pascal08 het volgende:
[..]
Dat is gewoon niet wat ik zoek. Ik heb zelf inmiddels al een code geschreven. Kostte uiteindelijk minder moeite dan een geschikte library vinden.
Interessante praatjes zijn datquote:Op dinsdag 15 april 2014 21:26 schreef slacker_nl het volgende:
https://www.destroyallsoftware.com/talks/boundaries
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 | <?php if(!empty($resultaat["matches"])) { $current_count = 0; $topic_ids = array(); $users_topics = array(); $this->cl->resetGroupBy(); # loop over de gevonden topic-id's foreach($resultaat["matches"] as $mId => $mData) { $current_count++; $pCounts = $mData['attrs']; $topic_ids[] = $pCounts['topic_id']; # verwerk het in stukken van 32 topics zodat het max uit de volgende query nooit boven de 10.000 (max Sphinx) uitkomt met 310 posts per topic gerekend if(count($topic_ids) == 32 || ($current_count == $total_found && !empty($topic_ids))) { $this->cl->resetFilters(); $this->cl->SetFilter("topic_id", $topic_ids); $topic_ids = array(); $this->cl->SetLimits(0, 10000, 10000); $resultaat = $this->cl->Query('', $this->config['indices']); $total_query_time += $resultaat["time"]; if(!empty($resultaat["matches"])) { # loop over de teruggegeven posts en voeg de topic-id's toe aan de array welke de unieke topics per gebruiker bevat, dit wordt later dvm de count functie toegevoegd aan de lijst welke wordt weergegeven in de tool # dit stuk is erg traag en doet er enkele seconden over om een lijst van 15.000 posts te verweken (ingevoerde gebruiker heeft in dit geval in 50 topics gepost) foreach($resultaat["matches"] as $mId => $mData) { if($mData['attrs']['auteur_id'] != $auteurId) { if(!isset($users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']])) { $users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']] = 1; } } } } } } } ?> |
Bij dit stuk gaat het traag:quote:Op vrijdag 25 april 2014 23:02 schreef zoem het volgende:
Wat is precies de bottleneck? Om wat voor orde van grootte gaat het in die loops? Zegt bijv. de xdebug profiler iets zinnigs?
1 2 3 4 5 6 7 8 9 | <?php foreach($resultaat["matches"] as $mId => $mData) { if($mData['attrs']['auteur_id'] != $auteurId) { if(!isset($users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']])) { $users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']] = 1; } } } ?> |
1 2 3 4 5 6 7 8 9 | <?php foreach($resultaat["matches"] as $mId => $mData) { if($mData['attrs']['auteur_id'] != $auteurId) { if(!isset($users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']])) { $users_topics[$mData['attrs']['auteur_id']][$mData['attrs']['topic_id']] = 1; } } } ?> |
Ik denk dat in het eerste if statement met de $auteurId wordt gekeken of de post niet van degene zelf is.quote:Op zaterdag 26 april 2014 09:31 schreef Light het volgende:
[ code verwijderd ]
Hier vallen me een paar dingen op. Om te beginnen ben ik benieuwd wat er in $auteurId staat en waarom er een != wordt gebruikt voor die vergelijking. Verder heb je de isset()-check niet nodig. Je set de waarde op 1, en als die toevallig al geset was, verandert er niets. En je benadert (ook zonder isset()) $mData['attrs']['auteur_id'] meerdere keren. Niet fout, maar ik zou er een variabele van maken (en dat waarschijnlijk ook doen voor $mData['attrs']['topic_id']), al was het maar voor een betere leesbaarheid.
Kan je deze logica niet veel beter in je SQL oplossen, dat lijkt me vele malen sneller dan het oplossen in PHP.quote:Op vrijdag 25 april 2014 22:56 schreef bondage het volgende:
Het script doet het volgende:
1. Haal alle topic-id's op waar de ingevoerde gebruiker heeft gereageerd
2. Haal alle posts behorende bij de topic-id's op in delen van 32 topics, dit omdat Sphinx is ingesteld op max 10.000 resultaten
3. Loop over alle posts en voeg de bijbehorende topic-id's toe aan een array welke de unieke topic's per gebruiker gevat.
In $auteurId staat het id van de user welke de post heeft geplaatst, aangezien ik de posts van degene waar op wordt gezocht wil negeren (wat Maringo al aangaf) gebruik ik die vergelijking.quote:Op zaterdag 26 april 2014 09:31 schreef Light het volgende:
[ code verwijderd ]
Hier vallen me een paar dingen op. Om te beginnen ben ik benieuwd wat er in $auteurId staat en waarom er een != wordt gebruikt voor die vergelijking. Verder heb je de isset()-check niet nodig. Je set de waarde op 1, en als die toevallig al geset was, verandert er niets. En je benadert (ook zonder isset()) $mData['attrs']['auteur_id'] meerdere keren. Niet fout, maar ik zou er een variabele van maken (en dat waarschijnlijk ook doen voor $mData['attrs']['topic_id']), al was het maar voor een betere leesbaarheid.
Dank. Ik ga het ff aanpassen en checken of het winst oplevertquote:Op zaterdag 26 april 2014 10:36 schreef Maringo het volgende:
Mijn idee is om die eruit te halen en eventueel na de foreach loop die ene entry uit $users_topics ($users_topics[$auteurId]) te halen.
Geprobeerd, met de volgende query:quote:Op zaterdag 26 april 2014 11:55 schreef slacker_nl het volgende:
[..]
Kan je deze logica niet veel beter in je SQL oplossen, dat lijkt me vele malen sneller dan het oplossen in PHP.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT COUNT(*), naam FROM ( SELECT fok_user.naam, `fok_post`.auteur FROM `fok_post` RIGHT JOIN ( SELECT DISTINCT topicid FROM `fok_post` WHERE `auteur` = 128465 AND `fok_post`.`tijdstip` BETWEEN UNIX_TIMESTAMP('2014-04-01 00:00:01') AND UNIX_TIMESTAMP('2014-04-26 23:59:59') AND `fok_post`.`year` = 2014 ) AS t ON (`fok_post`.topicid = t.topicid) JOIN fok_user ON `fok_post`.auteur = fok_user.id WHERE `fok_post`.auteur != 128465 GROUP BY `fok_post`.auteur, `fok_post`.topicid ) AS u GROUP BY auteur ORDER BY COUNT(*) DESC LIMIT 100 |
Ahja, je wilt een overzicht van vriendjes maken. Hoe moet ik dat zien? Een lijst van users die in dezelfde topics gepost hebben?quote:Op zaterdag 26 april 2014 16:03 schreef bondage het volgende:
[..]
In $auteurId staat het id van de user welke de post heeft geplaatst, aangezien ik de posts van degene waar op wordt gezocht wil negeren (wat Maringo al aangaf) gebruik ik die vergelijking.
Die isset is idd niet nodig, dom dat ik me dat niet eerder had gerealiseerd aangezien ik heel goed weet dat het in dit geval geen effect op de resulterende array heeft. Ik haal deze sowieso weg.
De waarden in $mData['attrs']['auteur_id'] en $mData['attrs']['topic_id'] zet ik in een variable, zelfs al levert het maar weinig op ben ik al blij.
In ieder geval heel erg bedankt voor het meedenken.
Klopt. Zo is dit mijn lijstje wat ie eens op verzoek maakte:quote:Op zaterdag 26 april 2014 16:58 schreef Light het volgende:
[..]
Ahja, je wilt een overzicht van vriendjes maken. Hoe moet ik dat zien? Een lijst van users die in dezelfde topics gepost hebben?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 142 Rezania 139 d4v1d 120 Amarantha 118 FL_Freak 118 Lt.Surge 103 SgtPorkbeans 96 LittleBrownie 96 Flippiee 95 gianni61 94 Fopje 91 BBQSausage 85 Bitterlemon 84 Snowbells 74 Roburtt 72 HeaN82 |
Exactquote:Op zaterdag 26 april 2014 16:58 schreef Light het volgende:
[..]
Ahja, je wilt een overzicht van vriendjes maken. Hoe moet ik dat zien? Een lijst van users die in dezelfde topics gepost hebben?
Ik heb je query wat herschreven, zonder subqueries en right joins. Ongetest, uiteraard.quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT count(DISTINCT friend_post.topic_id) cnt, u.naam FROM fok_user u INNER JOIN fok_post search_user_post ON search_user_post.auteur = 128465 AND search_user_post.tijdstip BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:01') AND UNIX_TIMESTAMP('2014-04-26 23:59:59') AND search_user_post.year = 2014 INNER JOIN fok_post friend_post ON friend_post.auteur = u.id AND friend_post.auteur != 128465 AND friend_post.topic_id = search_user_post.topic_id GROUP BY u.naam ORDER BY cnt DESC LIMIT 100; |
Oeh, ik ga hem ff testen.quote:Op zaterdag 26 april 2014 17:33 schreef Light het volgende:
SELECT count(DISTINCT friend_post.topic_id) cnt, u.naam
FROM fok_user u
INNER JOIN fok_post search_user_post
ON search_user_post.auteur = 128465
AND search_user_post.tijdstip BETWEEN UNIX_TIMESTAMP('2014-01-01 00:00:01') AND UNIX_TIMESTAMP('2014-04-26 23:59:59')
AND search_user_post.year = 2014
INNER JOIN fok_post friend_post
ON friend_post.auteur = u.id
AND friend_post.auteur != 128465
AND friend_post.topic_id = search_user_post.topic_id
GROUP BY u.naam
ORDER BY cnt DESC
LIMIT 100;
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |