bewerking zwaar?
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
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.
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.
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 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.
En kan je een file "kapot" maken? Er moet immers een schijfbewerking worden uitgevoerd.
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 .
Tip: gebruik XDebug in combinatie met een tool als CacheGrind (WinCacheGrind voor Windows) om te zien hoevaak en hoelang een functie wordt uitgevoerd. Zie 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
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
Dit zou inhouden dat 10xfile_exists een seconde kost. Dat lijkt me sterk.
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