bestanden controleren
Hoe ver moet je eigenlijk gaan met het controleren van bestanden? Als je een bestand wil includen of inlezen, is het dan verstandig om eerst te controleren of dat bestand wel of niet bestaat? In het boek dat ik aan het lezen ben, ging het op een gegeven moment over het inlezen van een bestandje. En toen werd eerst gecontroleerd of het bestand wel bestaat. Nu vraag ik me dus af of dat wel of niet noodzakelijk is en hoe jullie daar mee omgaan.
Graag jullie reacties.
Graag jullie reacties.
Gesponsorde koppelingen:
Zodra je met fopen werkt moet je altijd eerst controleren of een bestand bestaat. Want doe je die controle niet en voer je meteen fopen uit dan krijg je een foutmelding.
Bij bijv. file_get_contents wordt slechts alleen false gereturned als het bestand niet bestaat. Hierbij is een check of het bestand bestaat dus niet nodig, maar wel weer een check of de functie geen false returned.
Het ligt dus totaal aan de return values.
Bij fwrite gebruiken veel mensen is_writable. Dit lijkt me onnodig, aangezien fwrite slechts alleen false returned als er iets fout gaat en geen error. Maar ik heb dit nog nooit uitgetest, dus hier kan ik ernaast zitten.
Bij bijv. file_get_contents wordt slechts alleen false gereturned als het bestand niet bestaat. Hierbij is een check of het bestand bestaat dus niet nodig, maar wel weer een check of de functie geen false returned.
Het ligt dus totaal aan de return values.
Bij fwrite gebruiken veel mensen is_writable. Dit lijkt me onnodig, aangezien fwrite slechts alleen false returned als er iets fout gaat en geen error. Maar ik heb dit nog nooit uitgetest, dus hier kan ik ernaast zitten.
Wouter, dankjewel voor je reactie. Maar ik bedoel het eigenlijk nog net iets anders.
Mijn vraag is meer ÓF je het altijd moet checken. Stel ik wil ergens settings.php includen. Ik weet de locatie van het bestand, dus ik doe include('/map/settings.php'). Moet ik nu vantevoren dan checken of het bestand settings.php wel bestaat? Of als ik bijvoorbeeld weet dat een .txt file zich op een bepaalde locatie zou moeten bevinden, moet ik dit dan toch nog eerst controleren voordat ik fopen gebruik?
Mijn vraag is meer ÓF je het altijd moet checken. Stel ik wil ergens settings.php includen. Ik weet de locatie van het bestand, dus ik doe include('/map/settings.php'). Moet ik nu vantevoren dan checken of het bestand settings.php wel bestaat? Of als ik bijvoorbeeld weet dat een .txt file zich op een bepaalde locatie zou moeten bevinden, moet ik dit dan toch nog eerst controleren voordat ik fopen gebruik?
Ik zou het wel doen. Je weet nooit wat een gebruiker doet.
Hoe bedoel je dat Wouter "Je weet nooit wat een gebruiker doet."?
Maar jij zegt dus eigenlijk dat je zodra je een bestand include, required of opent, dat je dan ALTIJD moet checken of het bestand wel bestaat?
Maar jij zegt dus eigenlijk dat je zodra je een bestand include, required of opent, dat je dan ALTIJD moet checken of het bestand wel bestaat?
Ik denk dat een controle altijd handig is. Als een bv connect.php niet gevonden kan worden, werkt de verbinding met de database niet, wat allerlei vreemde foutmeldingen op je site kan veroorzaken. Door dit eerst te controleren kun je de boel voor de bezoeker van de site netjes afhandelen.
Het komt denk ik op hetzelfde neer als een goede foutafhandeling van een query: zorg dat fouten netjes afgehandeld worden, en dat ze later in het script geen problemen gaan veroorzaken.
Het komt denk ik op hetzelfde neer als een goede foutafhandeling van een query: zorg dat fouten netjes afgehandeld worden, en dat ze later in het script geen problemen gaan veroorzaken.
Als je een bestand includeert, zou ik alleen een controle gebruiken voor bestanden die de gebruiker zelf aanpast, zoals configuratie-bestanden.
Tobias, oké. Stel dat er inderdaad dingen mis gaan als ie connect.php niet kan vinden. Dan heb je inderdaad een probleem. Maaaaaar... en dan kom je dus eigenlijk tot de kern van mijn vraag: als je zeker weet dat connect.php bestaat (je hebt het immers zelf gecreëerd) waarom zou je dan nog gaan controleren of het bestaat? Een bestand kan toch niet uit zichzelf verdwijnen? Met andere woorden, is zo'n controle geen overkill? Stel dat je per pagina-aanroep 10 includes doet (en er zijn cms-systemen die per pagina aanroep wel meer dan 100 includes doen!) dan zou je dus 10 controles moeten uitvoeren. Stel dat je een druk-bezochte site hebt waar 100 bezoekers tegelijk op zitten. Dan zou dit per pagina-aanroep dus 1000 extra controles opleveren. Stel dat die bezoekers 3 pagina's per minuut bekijken dan praat je al over 3.000 controles. Laat staan als je geen 10 includes per pagina-aanroep hebt maar 25... Dus mijn vraag is, wat is wijsheid...? Is het zinvol om iets te controleren wat eigenlijk gewoon altijd bestaat?
Je weet niet zeker dat een bestand bestaat, een gebruiker kan hem zelf verwijderd hebben.
En mocht je 10 includes hebben en 100 bezoekers tegelijkertijd en elke 3 min. een pagina dan kom je op een verschil tussen checken en niet checken uit op: 1.391021410624E-5 µs. Dit is dus wel geteld 1,39102141E+12 s en dat is dus in 'normale' taal 0,00000000000139102141E+12 s. Dit is dus nauwelijks een verschil.
Als we nou het CMS systeem wordpress nemen. Als je daar get_header() gebruikt controleert Wordpress of <theme-name>/header.php bestaat. Bestaat deze niet dan include hij het standaard header.php bestand. Dus ook het grootte WordPress doet controles, ik denk dus niet dat dit overkill is.
En mocht je 10 includes hebben en 100 bezoekers tegelijkertijd en elke 3 min. een pagina dan kom je op een verschil tussen checken en niet checken uit op: 1.391021410624E-5 µs. Dit is dus wel geteld 1,39102141E+12 s en dat is dus in 'normale' taal 0,00000000000139102141E+12 s. Dit is dus nauwelijks een verschil.
Als we nou het CMS systeem wordpress nemen. Als je daar get_header() gebruikt controleert Wordpress of <theme-name>/header.php bestaat. Bestaat deze niet dan include hij het standaard header.php bestand. Dus ook het grootte WordPress doet controles, ik denk dus niet dat dit overkill is.
Wouter, dankjewel weer voor je reactie. Jij schrijft "Je weet niet zeker dat een bestand bestaat, een gebruiker kan hem zelf verwijderd hebben." Maar hoe bedoel je dat dan. Een bezoeker van een website kan toch niet bij de bestanden? Tenzij je site gehackt wordt of iets dergelijks, maar in dat geval zal een controle ook niet meer helpen. Ik vind het gewoon vaag dat je dus gaat checken of iets er is... terwijl het er eigenlijk altijd is. Het voelt voor mij een beetje alsof je iedere keer als je gaat autorijden eerst gaat controleren of alle onderdelen wel aanwezig zijn in de auto. Je gaat toch ook niet eerst kijken of alle banden er wel onder zitten en of er niet toevallig een onderdeeltje uit de motor mist?????? Of zie ik het nu helemaal verkeerd? Ik probeer overigens niet mijn eigen mening door te drukken hoor... ik ben alleen benieuwd waarom die controle noodzakelijk is.
Gewijzigd op 16/12/2011 16:56:45 door Ozzie PHP
Ozzie PHP op 16/12/2011 16:55:57:
Je gaat toch ook niet eerst kijken of alle banden er wel onder zitten en of er niet toevallig een onderdeeltje uit de motor mist??????
nou...... bij mijn rijlessen (10 jaar terug) werd dat wel aangeraden, tot op zekere hoogte....
Maar on topic, ik begrijp jouw punt wel. Ik doe het op het moment ook niet vanwege dezelfde redenen die jij aangeeft. Wat ik eerder zou doen (maar ook nog niet doe overigens) is bijvoorbeeld een dagelijks check buiten de normale pagina's om of alles nog steeds correct is. Dus of de bestanden bestaan, de foto directories er nog zijn en benaderbaar zijn etc. Bij elk script elke object bestand controleren lijkt mij ook overdreven om eerlijk te zijn.
Dit is ook nieuw voor mij om een controlle te gaan uitvoeren op een geinclude bestand. Om eerlijk te zijn lees ik dat ook voor het eerst.
Ik kan mij 2 versie's over bedenken.
1. Controlleren op bepaalde bestanden zal idd een uitkomst zijn. Neem als voorbeeld een config.php. Als die op de een of andere manier niet aanwezig is of je hebt hem verplaatst of wat dan ook. Dan kan je op heel je site de error krijgen dat de config.php niet gevonden kan worden. Maar dan zit je meestal met lappen tekst.
Terwijl je met een controlle bij niet gevonden kunt opgeven. Kan config.php niet vinden op lokatie. Dit lijkt mij dan weer netter staan dan bijvoorbeeld:
ERROR: Kan geen connectie maken met de databse. geinclude file is niet gevonden. error op regel 14 van D:/www/server/blablabla.php
Die error meldingen zijn vaak lang en overdreven voor de site bezoekers. Met controlle zou je dit in de hand kunnen houden. Daarvoor zal controlle handig zijn en lijkt mij persoonlijk geen overkill.
2. Wil je nu een simpel menutje of simpel paginatje includen. Dan vraag ik mij af of dan een controlle nu overkill is of weer niet. Met simpele pagina's heb ik daarom op dit moment mijn twijfels of het een idee is of overkill.
Maar is wel iets om over na te denken.
Ik kan mij 2 versie's over bedenken.
1. Controlleren op bepaalde bestanden zal idd een uitkomst zijn. Neem als voorbeeld een config.php. Als die op de een of andere manier niet aanwezig is of je hebt hem verplaatst of wat dan ook. Dan kan je op heel je site de error krijgen dat de config.php niet gevonden kan worden. Maar dan zit je meestal met lappen tekst.
Terwijl je met een controlle bij niet gevonden kunt opgeven. Kan config.php niet vinden op lokatie. Dit lijkt mij dan weer netter staan dan bijvoorbeeld:
ERROR: Kan geen connectie maken met de databse. geinclude file is niet gevonden. error op regel 14 van D:/www/server/blablabla.php
Die error meldingen zijn vaak lang en overdreven voor de site bezoekers. Met controlle zou je dit in de hand kunnen houden. Daarvoor zal controlle handig zijn en lijkt mij persoonlijk geen overkill.
2. Wil je nu een simpel menutje of simpel paginatje includen. Dan vraag ik mij af of dan een controlle nu overkill is of weer niet. Met simpele pagina's heb ik daarom op dit moment mijn twijfels of het een idee is of overkill.
Maar is wel iets om over na te denken.
@Erwin: Oké, ik was al bang dat ik de enige was. Je zou inderdaad een dagelijkse check kunnen doen en controleren of alles nog bestaat, maar dat betekent tegelijkertijd dat je alle bestanden ergens moet gaan bijhouden / invoeren want anders kun je niet controleren of ze nog bestaan. Dat lijkt me haast niet te doen. Maar toch ben ik wel benieuwd hoe de (opgeleide) ICT'ers op het forum hier mee omgaan. Controleren zij wel alles? Of juist niet?
@Frank: tja, zo zie je maar weer waar dit forum goed voor is ;) Ik hoop dat iemand met een goed antwoord komt.
@Frank: tja, zo zie je maar weer waar dit forum goed voor is ;) Ik hoop dat iemand met een goed antwoord komt.
Ik ben niet opgeleid, maar zal wel mijn mening geven ;).
>>Jij schrijft "Je weet niet zeker dat een bestand bestaat, een gebruiker kan hem zelf verwijderd hebben." Maar hoe bedoel je dat dan. Een bezoeker van een website kan toch niet bij de bestanden?
Hiermee bedoel ik ook de beheerder van een website. Deze kan een bestand verwijderen uit zijn host, of er kan bij het overplaatsen van local naar host via ftp een bestand vergeten zijn. Er zijn denk ik best wel wat opties wanneer je zo'n bestand kwijt kan raken.
Ik ben van mening dat je dit wel moet controleren. Want anders krijg je een error en dat wil je nou net voorkomen, je wilt dat die error netjes afgehandeld wordt en een gebruiker een andere pagina krijgt te zien. Je wilt niet dat een gebruiker een halve pagina ziet met hier en daar een error.
>>Jij schrijft "Je weet niet zeker dat een bestand bestaat, een gebruiker kan hem zelf verwijderd hebben." Maar hoe bedoel je dat dan. Een bezoeker van een website kan toch niet bij de bestanden?
Hiermee bedoel ik ook de beheerder van een website. Deze kan een bestand verwijderen uit zijn host, of er kan bij het overplaatsen van local naar host via ftp een bestand vergeten zijn. Er zijn denk ik best wel wat opties wanneer je zo'n bestand kwijt kan raken.
Ik ben van mening dat je dit wel moet controleren. Want anders krijg je een error en dat wil je nou net voorkomen, je wilt dat die error netjes afgehandeld wordt en een gebruiker een andere pagina krijgt te zien. Je wilt niet dat een gebruiker een halve pagina ziet met hier en daar een error.
Hmm, ja... ik snap van de ene kant wat je bedoelt... maar dan is het dus meer een soort van veiligheid voor het geval de beheerder / programmeur een flinke fuck up maakt. Maar als dat gebeurt dan neem ik aan dat de beheerder direct ziet dat er iets mis gaat en de fout direct herstelt.



