bewerking zwaar?
Om de een of andere reden heb ik het gevoel dat het controleren of een bestand bestaat (via file_exists) een vrij "zware" bewerking is vergeleken bij standaard functies zoals echo of isset (om maar eens wat te noemen). In mijn gedachten staat er op de server fysiek een bestand. Php voert dan een proces uit en gaat daarbij proberen contact te maken met het fysieke bestand op de server. Zou je een parallel trekken met de echte wereld, dan heb ik het gevoel dat de functie echo een mannetje is die z'n mond opentrekt en iets zegt en dat de functie file_exists een mannetje is dat een bepaalde weg moet bewandelen (van de ene naar de andere directory) en via een een aantal gangetjes en kamers terecht komt bij de laatste kamer waar hij moet rondkijken of daar een bepaald bestand aanwezig is.
Voor mijn gevoel is dit laatste proces vrij traag omdat er een bepaalde weg moet worden bewandeld en levert het vergeleken met een simpele echo meer risico op, want stel dat het mannetje uitglijdt en het bestand beschadigt!
Oké... tot zover een kijkje in mijn gedachtenwereld (nee, ik ben volledig nuchter) maar wie weet hoe het er in het echt aan toe gaat? Is een file_exists controle een "zware" operatie en zijn er risico's aan verbonden? Of is het volledig te vergelijken met bijv. een echo?
Voor mijn gevoel is dit laatste proces vrij traag omdat er een bepaalde weg moet worden bewandeld en levert het vergeleken met een simpele echo meer risico op, want stel dat het mannetje uitglijdt en het bestand beschadigt!
Oké... tot zover een kijkje in mijn gedachtenwereld (nee, ik ben volledig nuchter) maar wie weet hoe het er in het echt aan toe gaat? Is een file_exists controle een "zware" operatie en zijn er risico's aan verbonden? Of is het volledig te vergelijken met bijv. een echo?
ik zou zeggen dat het vrij zwaar is, maar dat ook ligt aan de situatie. als hij al jouw mappen moet doorzoeken duurt dat natuurlijk langer (en dus zwaarder) dan wanneer je alles in 1 map hebt staan. en de functie geeft natuurlijk een true/ false terug, dus je kan gewoon in de if al neerzetten. hoe zwaar file_exists precies is in verhouding, weet ik niet
Ozzie,
Ik heb er eventjes op gezocht vind niet snel iets maar dit is misschien wel belangrijk:(php.net)
"Warning,
This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir."!
Verder had ik nog gevonden dat het bestand alleen kon beschadigen wanneer je file "file_get_contents" gebruikt en de verbinding halverwege wegvalt.
Ik heb er eventjes op gezocht vind niet snel iets maar dit is misschien wel belangrijk:(php.net)
"Warning,
This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir."!
Verder had ik nog gevonden dat het bestand alleen kon beschadigen wanneer je file "file_get_contents" gebruikt en de verbinding halverwege wegvalt.
Jeroen vd op 29/03/2012 13:53:56:
ik zou zeggen dat het vrij zwaar is, maar dat ook ligt aan de situatie. als hij al jouw mappen moet doorzoeken duurt dat natuurlijk langer
Ik geef gewoon het exacte pad aan waar het bestand staat.
@Bas: jouw 1e opmerking is niet echt relevant. Wat betreft je 2e opmerking stond daar bij dat file_exists een bestand niet kan beschadigen?
Ozzie PHP op 29/03/2012 14:00:24:
Ik geef gewoon het exacte pad aan waar het bestand staat.
@Bas: jouw 1e opmerking is niet echt relevant. Wat betreft je 2e opmerking stond daar bij dat file_exists een bestand niet kan beschadigen?
Jeroen vd op 29/03/2012 13:53:56:
ik zou zeggen dat het vrij zwaar is, maar dat ook ligt aan de situatie. als hij al jouw mappen moet doorzoeken duurt dat natuurlijk langer
Ik geef gewoon het exacte pad aan waar het bestand staat.
@Bas: jouw 1e opmerking is niet echt relevant. Wat betreft je 2e opmerking stond daar bij dat file_exists een bestand niet kan beschadigen?
Ozzie,
Het stond er niet bij nee, was gewoon een lijst met alle php functies die iets kunnen beschadigen. file_exists stond daar niet bij.
Toevoeging op 29/03/2012 14:03:57:
-Maakt wel uit of je een bestand van een andere server leest! Of gewoon je eigen!
Heb je een link naar die lijst?
Zal even kijken of ik hem nog kan vinden zit namelijk net in de trein. En was net nog thuis.
Oké... zou leuk zijn!
Uhm, op mobiel kan ik hem zo gauw niet vinden. Over 1,5 uur ben ik thuis dan stuur ik hem je.
Oké... ben benieuwd.
Iemand anders die wellicht nog een aanvulling heeft wat betreft de file_exists functie?
Iemand anders die wellicht nog een aanvulling heeft wat betreft de file_exists functie?
Bij file_exists moet de harde schijf (mechanisch) iets doen. Dat is logischerwijs 'zwaarder' dan een echo (electronisch) die enkel iets op het scherm zet.
Interessant SanThe, dat is inderdaad ook wel mijn gedachte...
Maar ik vraag me af of dit inderdaad zo is. Is een file uberhaupt een fysiek "ding" op de harde schijf? Of wordt dit misschien wel vertaald naar een stukje geheugen? Ben benieuwd of iemand mijn vraag kan beantwoorden op basis van de feiten (in plaats van op basis van mijn onderbuikgevoel).
Maar ik vraag me af of dit inderdaad zo is. Is een file uberhaupt een fysiek "ding" op de harde schijf? Of wordt dit misschien wel vertaald naar een stukje geheugen? Ben benieuwd of iemand mijn vraag kan beantwoorden op basis van de feiten (in plaats van op basis van mijn onderbuikgevoel).
een file, maakt niet uit welke, is fysiek opgeslagen op wat voor een schijf ook, als eentjes en nulletjes.
een echo is niets anders dan een proces: er komt geen schijf bij kijken, alleen het virtueel geheugen - zoals de naam aangeeft, niets fysieks
wanneer jij in jouw code een file aanroept, zal er dus altijd aan de schijf gevraagd moeten worden hoe en wat. en dat is fysiek belastend.
een echo is niets anders dan een proces: er komt geen schijf bij kijken, alleen het virtueel geheugen - zoals de naam aangeeft, niets fysieks
wanneer jij in jouw code een file aanroept, zal er dus altijd aan de schijf gevraagd moeten worden hoe en wat. en dat is fysiek belastend.
Hmmm, oké. Dat klinkt plausibel. Maar wanneer moet je echt gaan "uitkijken" dat je niet teveel file_exists gebruikt gedurende 1 pagina-aanroep? Mag je dat gerust 10x doen? 100x? 500x?
En kan je een file "kapot" maken? Er moet immers een schijfbewerking worden uitgevoerd.
En kan je een file "kapot" maken? Er moet immers een schijfbewerking worden uitgevoerd.
Tip: gebruik XDebug in combinatie met een tool als CacheGrind (WinCacheGrind voor Windows) om te zien hoevaak en hoelang een functie wordt uitgevoerd. Zie voorbeeld.
File exists kan verder niets "kapot" maken (wat versta je daaronder), al moet je wel rekening houden met het feit dat de output gecached wordt. Zie NOTE op http://www.php.net/file_exists .
File exists kan verder niets "kapot" maken (wat versta je daaronder), al moet je wel rekening houden met het feit dat de output gecached wordt. Zie NOTE op http://www.php.net/file_exists .
Gewijzigd op 29/03/2012 16:49:35 door Mark PHP
Ik vond dit wel een belangrijke note:
Ozzie PHP op 29/03/2012 16:14:37:
Hmmm, oké. Dat klinkt plausibel. Maar wanneer moet je echt gaan "uitkijken" dat je niet teveel file_exists gebruikt gedurende 1 pagina-aanroep? Mag je dat gerust 10x doen? 100x? 500x?
Ik heb een scriptje gehad waarbij na een query, bij ieder resultaa werd gekeken of een map bestond. De laadtijd liep daarmee tot 10 sec op bij 100 records
Hmmm... was dat niet gewoon een slechte query dan :D
Dit zou inhouden dat 10xfile_exists een seconde kost. Dat lijkt me sterk.
Dit zou inhouden dat 10xfile_exists een seconde kost. Dat lijkt me sterk.
oftewel 0.1 sec per gebruik van de functie, op jouw systeem
Toevoeging op 29/03/2012 18:04:42:
en ik vind het vrij plausibel eigenlijk
Toevoeging op 29/03/2012 18:04:42:
en ik vind het vrij plausibel eigenlijk
Tobias Tobias op 29/03/2012 17:59:42:
Ik heb een scriptje gehad waarbij na een query, bij ieder resultaa werd gekeken of een map bestond. De laadtijd liep daarmee tot 10 sec op bij 100 records
Waardeloze "test". Dit zal ongetwijfeld aan de query liggen (100 queries is sowieso not the way to go).
Ter vergelijking, Smarty roept, afhankelijk van de complexiteit van de templates, soms over de paar duizend file_exists' aan. De totale executietijd blijft onder de seconde.
Maar nogmaals, meten is weten, dus installeer XDebug en kijk wat in je scripts de meeste tijd kost, en ga dat optimaliseren. Of dat nu functie A of B is. Liever één functie die een minuut duurt, dan 60 functies die ieder één seconde duren.
Mark PHP op 29/03/2012 18:08:17:
Waardeloze "test". Dit zal ongetwijfeld aan de query liggen (100 queries is sowieso not the way to go).
Het was maar 1 query, maar bij de while-loop om de resultaten te echoen werd de map geconrtoleerd




