BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023
Dat is 9 van de 10 keer het probleem.
Tip: gebruik de volgende keer deoutput started at /home/www/vitix0r.awardspace.co.uk/controlpanel/includes/inc.functions.php:266
[code]je code[/] tags. Dan is je code een stuk leesbaarder.
[ Voor 50% gewijzigd door Gonadan op 07-03-2007 10:34 ]
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.
Omg, een spatie na een ?>Gonadan schreef op woensdag 07 maart 2007 @ 10:31:
Een EOLN (enter) na de PHP afsluiten tag (?>) in een van je includes misschien?
Dat is 9 van de 10 keer het probleem.
[...]
Tip: gebruik de volgende keer de
[code]je code[/] tags. Dan is je code een stuk leesbaarder.
Ehm..."dobbelyoe tee ef" maar super bedankt!
BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023
Hehe, je bent niet de eerste.b03tz schreef op woensdag 07 maart 2007 @ 10:40:
[...]
Omg, een spatie na een ?>
Ehm..."dobbelyoe tee ef" maar super bedankt!
Maar zoiets overkomt je (hoogstwaarschijnlijk) maar een keer.
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
IddGonadan schreef op woensdag 07 maart 2007 @ 10:42:
[...]
Hehe, je bent niet de eerste.
Maar zoiets overkomt je (hoogstwaarschijnlijk) maar een keer.
Thanks alot man!!
BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023
Anyone who gets in between me and my morning coffee should be insecure.
http://nl2.php.net/langua...ax.instruction-separation
Note: The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.
[ Voor 62% gewijzigd door Brakkie op 07-03-2007 12:07 ]
moet je wel héééél zeker weten dat niemand direct je include-file kan benaderen. Is wat rot als je database-connectie gegevens zo worden uitgelezenBrakkie schreef op woensdag 07 maart 2007 @ 12:06:
je kan de php sluit tag ook weg laten. Die is namelijk niet verplicht. Dan weet je zeker dat je na je script niet onbedoeld output naar de browser stuurt.
http://nl2.php.net/langua...ax.instruction-separation
[...]
verkeerd begrepen/gelezen... enkel de sluit-tag weg laten haalt de file wel door de parser natuurlijk
[ Voor 10% gewijzigd door Blackbird-ce op 07-03-2007 12:55 . Reden: leeeeeezen Blackbird, lezen. ]
Hey thanks!Brakkie schreef op woensdag 07 maart 2007 @ 12:06:
je kan de php sluit tag ook weg laten. Die is namelijk niet verplicht. Dan weet je zeker dat je na je script niet onbedoeld output naar de browser stuurt.
http://nl2.php.net/langua...ax.instruction-separation
[...]
Goede tip!!
BYD Tang Final Edition | 2x Marstek Venus 5.12KW | HW P1 | Homey Pro 2023
In mijn (niet altijd evenMueR schreef op woensdag 07 maart 2007 @ 11:36:
Je zou kunnen proberen om output buffering te gebruiken. Dan voorkom je deze problemen grotendeels.
Al helemaal aangezien de error gewoon duidelijk aangeeft waar de output zit
Extra tip: er zijn goede edittors die netjes zelf whitespace aan het einde van je file kunnen weghalen zoals mijn persoonlijke favoriet UltraEdit.
In mijn huidige project heb ik een ob_start() en ob_clean() om mijn config file gezet waarbinnen allerlei dingen geinclude worden (waaronder meerdere third party libs die op hun beurt ook weer van alles includen). Op die manier weet ik zeker dat geen van die bestanden op de een of andere manier output genereert die de boel in de war schopt. Werkt prima, en is echt niet langzamer.
Volgens mij maakt output buffering je code juist sneller omdat alle output in 1 keer verstuurd wordt in plaats van in allemaal kleine stukjes. Het verzenden in kleine stukjes veroorzaakt netwerk overhead.FragFrog schreef op woensdag 07 maart 2007 @ 15:58:
[...]
In mijn (niet altijd even) nedere opinie is output buffering om dit soort problemen op te lossen een zwak excuus voor goed coden. Daarnaast werkt het ook nog eens vertragend.
[ Voor 6% gewijzigd door Brakkie op 07-03-2007 17:16 ]
Het werkt vertragend doordat eerst je hele script klaar moet zijn voordat het verzenden begint en je browser er iets mee kan. Zeker bij wat grotere scripts kan dit zo een seconde of wat extra kosten.Brakkie schreef op woensdag 07 maart 2007 @ 17:11:
Volgens mij maakt output buffering je code juist sneller omdat alle output in 1 keer verstuurd wordt in plaats van in allemaal kleine stukjes. Het verzenden in kleine stukjes veroorzaakt netwerk overhead.
Daarnaast is het niets meer dan extra code gebruiken om je eigen slordigheid op te vangen. Dat je het gebruikt om zeker van te zijn dat externe libraries geen whitespace outputten kan ik me voorstellen, maar als je kennelijk zulke slordig geschreven libraries include vraag ik me af of je niet beter zelf die functionaliteit kan schrijven of van een betere source halen. Ik gebruik zelf geregeld PEAR libraries en heb nog nooit output buffering daarvoor nodig gehad.
En je browser kan dan ook pas beginnen met externe bestanden (plaatjes e.d.) downloaden als je script helemaal klaar is.
Dat vertraagt ook behoorlijk.
Ik gebruik buffering alleen bij 3rd party scripts die output genereren.
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Onderstaand scriptje doet er bij mij met output buffering uit bijna 2x zo lang over om gegenereerd te worden dan met output buffering aan.
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
| $mtime = microtime(); $mtime = explode(' ', $mtime); $mtime = $mtime[1] + $mtime[0]; $starttime = $mtime; ###################################### $dobuffer = false; if($dobuffer) { ob_start(); } for($i = 0; $i <= 100000; $i++) { echo "Dit is output die naar de browser gaat.<br>"; } if($dobuffer) { $output = ob_get_clean(); echo $output; } ########################################################## $mtime = microtime(); $mtime = explode(" ", $mtime); $mtime = $mtime[1] + $mtime[0]; $endtime = $mtime; $totaltime = ($endtime - $starttime); echo 'This page was created in ' .$totaltime. ' seconds.'; |
Wat is dan sowieso het voordeel? Je zal dan echt geen verschil merken.Brakkie schreef op donderdag 08 maart 2007 @ 15:19:
Als je aanneemt dat het maximaal 0,1 seconde duurt om een pagina aan de serverkant te genereren dan is het voordeel om output direct naar de client te versturen te verwaarlozen. (Deze thread doet er bijv. 0,1 sec over om gegenereerd te worden)
Onderstaand scriptje doet er bij mij met output buffering uit bijna 2x zo lang over om gegenereerd te worden dan met output buffering aan.
Het renderen van de pagina duur sowieso langer dan 0.1s.
Dus in mijn ogen haal je hier je eigen standpunt onderuit.
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Het wordt voor je server niets lichter hoor.Brakkie schreef op donderdag 08 maart 2007 @ 15:26:
Een script dat lichter is voor de server vind ik anders een behoorlijk voordeel. Dat weegt naar mijn idee zwaarder dan content 0,1 seconde eerder naar de client sturen.
Die moet nog steeds dezelfde taken uitvoeren. Alleen spaart hij de output even op.
Het zal hooguit voor je verbinding makkelijker zijn.
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
(ik denk overigens niet de wijsheid in pacht te hebben wat dit betreft maar ga gewoon af op m'n testje)
[ Voor 25% gewijzigd door Brakkie op 08-03-2007 16:10 ]
Je script wordt er eerder zwaarder door dan lichter, je server moet immers -meer- doen. Kost meer geheugen, meer CPU kracht, meer tijd. Staat ook gewoon in de handleiding, je script slaat wat dat betrefd nergens op - de tijd die jij berekent is de executie tijd, echter zonder output buffering is dat NIET hetzelfde als de tijd die nodig is voor er iets gebeurt in je browser. Ga maar na, doe een zware berekening 10.000.000 keer, in het ene geval begin je direct met outputten en in het andere geval spaar je het op, in het eerste geval zul je dan direct output zien in het andere geval moet je eerst 30 seconden wachten. Natuurlijk duurt het uitvoeren van het script langer als'ie tussendoor op de client moet wachten, maar dat zorgt er niet voor dat het intensiever is, alleen dat je CPU belasting minder piekt!Brakkie schreef op donderdag 08 maart 2007 @ 15:26:
Een script dat lichter is voor de server vind ik anders een behoorlijk voordeel. Dat weegt naar mijn idee zwaarder dan content 0,1 seconde eerder naar de client sturen.
Natuurlijk, niet in hoeveelheden die jij gaat missen, maar je zal maar een zware website als t.net maken ooit en continu dat soort dingen fout doen, dat ga je voelen.
Overigens betwijfel ik of het uberhaupt lichter is voor je verbinding, ethernet werkt immers al met packets, max MTU size is 1500 bytes, dus zo ongeveer elke site moet toch als meerdere packets de deur uit. Maar in plaats van dat je de upload uitsmeert over een langere tijd probeer je'm er nu in een keer door te jagen, zal alleen maar langer gaan duren voor je bezoekers. Wederom, niet veel, maar waarom -zou- je als het niet hoeft?
[ Voor 27% gewijzigd door FragFrog op 08-03-2007 16:18 ]
Dat zou op zich nog wat uit kunnen maken.Brakkie schreef op donderdag 08 maart 2007 @ 16:10:
Heb altijd gedacht dat executie tijd wel het een en ander zegt over de zwaarte van een script en het testje spreekt wat dat betreft in het voordeel van OB.
(ik denk overigens niet de wijsheid in pacht te hebben wat dit betreft maar ga gewoon af op m'n testje)
Ik vraag me echter af wat er gebeurt als je erg veel output hebt.
Maak je dan nog winst, of wordt het dan te verwaarlozen?
Commandline PHP geeft:
0.043331861496 geen ob
0.0416879653931 ob
Ik kan dus niet echt zeggen dat het voor de server veel uit maakt.
[ Voor 11% gewijzigd door Gonadan op 08-03-2007 16:16 ]
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
0.042 0.43 met ob
0.025 0.025 zonder ob
Maar zoals Janoz al aangeeft maakt dat niet zo veel uit.
Mijn gevoel zegt me dat als je ob gebruikt je juist pieken in de belasting gaat genereren.
Zowel op het geheugen als op je verbinding.
Zonder ob wordt het veel geleidelijker afgehandeld.
[ Voor 63% gewijzigd door Gonadan op 08-03-2007 16:26 ]
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Verder wat Gonadan en Janoz al zeiden natuurlijk; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit. You can enable output buffering during runtime by calling the output
; buffering functions. You can also enable output buffering for all files by
; setting this directive to On. If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = Off
Ik heb nog nooit een php OB gebruikende pagina gezien waarbij geen (veel) nettere non OB oplossing mogelijk was.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Dat ben ik op zich met je eens.Janoz schreef op donderdag 08 maart 2007 @ 16:43:
Het hele OB gebeuren vind ik trouwens maar rotzooi. Het enige wat het doet is problemen die ontstaan door lelijke en ongestructureerde code te verdoezelen. Wanneer je je buisnesslogic en je view netjes gescheiden houdt zul je nooit in een situatie kunnen komen waarbij je halverwege het renderen je pagina weg moet gooien.
Ik heb nog nooit een php OB gebruikende pagina gezien waarbij geen (veel) nettere non OB oplossing mogelijk was.
Maar ik heb bijvoorbeeld in de situatie gezeten dat ik third party epp/soap/xml scripts moest gebruiken die hoe dan ook output genereren.
Toen heb ik ob_start en ob_end_clean gebruikt om daar vanaf te raken.
Verder heb ik inderdaad nog nooit meegemaakt dat het nuttig was.
Look for the signal in your life, not the noise.
Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
Ik eenmaal met een AJAX library (sAJAX) die hardcoded echo's gebruikte in plaats van returns. OB gebruikt om z'n output toch in een variabele te kunnen donderen om aan Smarty door te geven. Andere optie was logic en view mengen, maar daar had ik nog minder zin in.Janoz schreef op donderdag 08 maart 2007 @ 16:43:
ik heb nog nooit een php OB gebruikende pagina gezien waarbij geen (veel) nettere non OB oplossing mogelijk was.
Alhoewel, als je doorredeneert was er natuurlijk ook nog de optie die hele ajax library weg te bonjouren en wat beters te pakken.. There you go..