Pagina wordt dubbel geladen?
Nou kan ik ook hardcoded pagina's inladen, als er in database staat dat de pagina een bestand is.
Vervolgens parse ik dmv ob_get_contents(); naar een string.
Dan wordt het doorgeven aan een echo $output;
Nou is mijn vraag, zorgt ob_get_contents() ervoor dat de code in de pagina al wordt uitgevoerd?
Want ik ben nu met een profielpagina bezig, en aantal views, en steeds telt de script er 2 bij (hoewel dat niet zichtbaar is) Dus ik vermoed dat er tijdens de ob_get_contents() al een keer wordt opgeteld?
Is dit correct? En hoe kan ik dit voorkomen? Dat alleen de 'inhoud' van het bestand wordt ingeladen zonder uit te voeren
Met file_get_contents ontvang ik een gedeelte van de script uit bestand, maar wordt niet 'uitgevoerd'
Mijn parse ziet er als volgt uit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
private function parse($file) {
ob_start();
include($file);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
ob_start();
include($file);
$buffer = ob_get_contents();
ob_end_clean();
return $buffer;
}
Natuurlijk wordt het script 2 keer uitgevoerd, als je m tijdens parsen include.
Maar ik krijg het niet aan de praat door het script in te lezen, en daarna pas uit te voeren :(
In het begin leek t mij, dat de 'output' van wat geinclude wordt, werd opgeslagen in buffer.
Maar zodra ik de $buffer weer wil laten zien op het scherm, wordt het script weer uitgevoerd.
Gewijzigd op 26/02/2013 13:08:40 door Dennis WhoCares
Dennis WhoCares op 26/02/2013 12:58:04:
Nou is mijn vraag, zorgt ob_get_contents() ervoor dat de code in de pagina al wordt uitgevoerd?
Nou is mijn vraag, zorgt ob_get_contents() ervoor dat de code in de pagina al wordt uitgevoerd?
Nee dit lijkt mij niet, stel je zou een echo in je script hebben zou dit ook meten worden weergegeven.
Ja leek mij ook, dat ik dan 2 keer hetzelfde op scherm zou krijgen, maar heb ik bijv. een profiel.php geparsed.
En ik doe:
Dan krijg ik in database niet + 1 maar +2.
Gewoon frustrerend alsof het 2 keer wordt uitgevoerd.
Ik heb een echo gemaakt, dat eerst oude views laat zien, en de nieuwe views (dit geeft wel:
Oud: 12 - Nieuw: 13)
Dan ga ik in mn database kijken en staat er 14.
Gewijzigd op 26/02/2013 13:43:14 door Dennis WhoCares
Misschien zit het probleem dan toch in de query of iets 2 keer aanroepen.
Want als ik de updatequery weg haal, is er niks aan de hand, dan doet ie niet updaten :S
Het zit m echt in de parse denk ik, omdat het al eens geinclude wordt. Dus word t uitgevoerd.
Vervolgens wordt het geheel nogmaals geprint op het scherm IN de layout.
En dan dus nogmaals geupdate wordt?
Probeer eens $buffer = ob_get_clean();
dan krijg ik de een lege output van parse terug.
heb ob_end_clean vervangen voor ob_get_clean()
en nog steeds zelfde :(
Dat is op zich ook vreemd, volgens mij krijg je met ob_get_clean ook de output van de buffer en stop je ook meteen met bufferen. ob_end_clean is dan overbodig. Wat staat er in je include?
en het wordt 2 keer uitgevoerd voordat ik het print op mn scherm :S
dus ben ik nog verder weg van een oplossing
In de pagina dat wordt geparsed staat
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
/*
blah wat inhoud
*/
$newView = $profileQ->prof_views + 1;
echo 'Oud: ' . $profileQ->prof_views . ' nieuw: ' . $newView;
mysql_query("UPDATE profiles SET prof_views = " . $newView . " WHERE prof_id = " . $_GET['id']);
?>
/*
blah wat inhoud
*/
$newView = $profileQ->prof_views + 1;
echo 'Oud: ' . $profileQ->prof_views . ' nieuw: ' . $newView;
mysql_query("UPDATE profiles SET prof_views = " . $newView . " WHERE prof_id = " . $_GET['id']);
?>
Hij laat op mn scherm zien:
Oud: 0 nieuw: 1
en ik kijk in mn database en het is 2 geworden
Druk op F5
Oud: 2 nieuw: 3
Database: 4
Is er een mogelijheid om PRECIES de inhoud van .php file in te laden als een string (zonder include, zodat het niet uitgevoerd word)
en vervolgens te printen naar scherm?
Ik heb file() geprobeerd, maar dan voert ie de php code niet uit, en print ie gewoon domweg alles op het scherm.
Gewijzigd op 26/02/2013 14:58:04 door Dennis WhoCares
En als je bij het parsen alleen het bestand include en niets buffert, worden de views dan ook 2 keer zoveel?
Toevoeging op 26/02/2013 15:23:40:
Als ik return strip_tags($buffer); doet
krijg ik het wel zodat ie maar 1 keer de updateQuery uitvoert.
Maar, nou wil ik dus eigenlijk wel mn html opzet behouden
Gewijzigd op 26/02/2013 15:23:56 door Dennis WhoCares
Maar ik zie ook geen html, als wat jij zegt werkt zit het probleem waarschijnlijk ergens anders.
Zodra ik in mn parse strip_tags($buffer);
doe, krijg ik wel maar 1 keer de update.
Nu heb ik een lijst gemaakt van html tags, van quakit
En die heb ik gezet als $htmltags.
Dan in de parse() heb ik return strip_tags($buffer,$htmltags);
En nou heb ik wel mn opzet terug, en het is gestript, MAAR weer doet ie +2.
Dus ik heb alle tags in een array gezet, en om en om ingevoerd. (natuurlijk globaal om de 10)
Tot ik weer +2 kreeg. ben ik gaan halveren tot ik op <img> uitkwam.
de image was een testopzet, met src="#".
Ik heb alles terug gezet en de image een source gegeven, en nou doet ie het wel normaal.
Om een of andere reden zorgde de src="#" ervoor dat het script nogmaals geladen werd?!
Iemand enig idee hoe dit kon gebeuren, en waarom t zo 'vreemd' is. Tenminste ik vind het vreemd
Nee, het lijkt mij sterk dat door een src="#" een query 2 keer wordt uitgevoerd. Maar goed het werkt en daar gaat het om.
Tim Slootweg op 26/02/2013 16:29:35:
Nee, het lijkt mij sterk dat door een src="#" een query 2 keer wordt uitgevoerd. Maar goed het werkt en daar gaat het om.
Ja ik vind t ook heel vreemd. Ik kwam.eracter toen ik.langzaam.alle html tags ging exclude uit strip_tags
Toen ik bij <img> kwam begon t weer dubbel te gebeuren
Beetje vreemd maar ik zal de images controleren met script voordat t doorgevoerd wordt. Dan.kan het niet nogmaals voorkomen
Toch bedankt voor je hulp Tim