Nu zit ik een beetje moeilijk te doen om eerst te controleren of het ingegeven pad een string is, of er ongeldige karakters in staan, of het pad niet leeg is enz.
Volgens mij ben ik veel te omslachtig bezig. Ik vraag me dan ook af of PHP standaard een pad validatie functie kent. Of wellicht weet iemand hier een handige preg_match voor? Een pad mag alleen bestaan uit cijfers en letters en mag underscores en forward slashes bevatten, maar geen dubbele forward slashes.
Nog een klein extra vraagje. Geen idee of iemand dit weet... Stel je controleert zo'n pad via een functie of via preg_match, maar in plaats van een string wordt er een boolean of object ingegeven (omdat een programmeur ligt te slapen), resulteert dit dan in een warning? Of ziet de preg_match functie van hé, dit is geen string en handelt ie het dan gewoon netjes af?
Waarom mag een _ niet in de url staan? Zover ik weet is dit gewoon toegestaan.
@Ozzie,
Gezien de topics die je de laatste tijd gestart hebt, heb ik het idee dat je heel je CMS zaak een beetje overschat. Begrijp me niet verkeerd, ik vind het leuk dat je zulke vragen stelt, maar ik denk dat het overbodig is.
Daarnaast, heb je wel eens nagedacht over de snelheid van jouw framework / CMS? Wanneer je van dit soort validaties erin bouwt wordt het geval steeds trager.
Nogmaals, begrijp me goed, ik raad je het niet af. Ik raad je alleen aan om de juiste beslissingen te nemen en goed na te denken over de overwegingen die je moet maken.
Waarom mag een _ niet in de url staan? Zover ik weet is dit gewoon toegestaan.
Het mag, maar is niet aan te raden. Vooral op SEO gebied is een - noodzakelijk en een _ zowat verboden. Zie ook deze video van Matt Cutts: http://www.youtube.com/watch?v=AQcSFsQyct8
[size=xsmall]Toevoeging op 10/03/2012 10:14:08:[/size]
Niels Kieviet
Waarom mag een _ niet in de url staan? Zover ik weet is dit gewoon toegestaan.
Het mag, maar is niet aan te raden. Vooral op SEO gebied is een stuk beter om - te gebruiken. Zie ook deze video van Matt Cutts: http://www.youtube.com/watch?v=AQcSFsQyct8
Het mag, maar is niet aan te raden. Vooral op SEO gebied is een - noodzakelijk en een _ zowat verboden.
Ja, dat klopt. Dat wist ik inderdaad. Maar dat heeft vooral betrekking op urls's en niet zozeer op interne paden.
Niels Kieviet op 10/03/2012 10:06:44
Ik raad je alleen aan om de juiste beslissingen te nemen en goed na te denken over de overwegingen die je moet maken.
Thanks Niels. Daarom zit ik hier ook op het forum ;)
Maar bedoel je dat ik de paden dan gewoon maar helemaal NIET moet controleren? En op het moment dat het fout gaat dan gaat het gewoon fout? Maar dan bestaat ook de kans dat je bijvoorbeeld dubbele slashes in je paden hebt staan. Dit zal in sommige gevallen gewoon werken, maar het is niet netjes. Maar wat is dan de oplossing? Niet controleren en maar er vanuit gaan dat een programmeur het goed invoert? Is dat wat je bedoelt? Ik snap dat je zegt dat je niet te veel moet willen valideren, maar wanneer MOET je nu écht valideren? Ik bedoel, je kan ook helemaal niks valideren en alleen afgaan op de PHP warnings maar dat lijkt me toch ook niet helemaal de bedoeling? Dus in z'n algemeenheid: WANNEER en WAT moet je controleren / valideren? (en wat niet?)
haal de + na . eens weg. Want nu heb je er 2 keer + staat en dan krijg je dus iets als (.+)+ dus je zegt elk teken, behalve een spatie, match je zo vaak als je wilt en dan nog eens zo vaak als je wilt.
Verder matched een . ook een slash, dus hij zal nooit in het gedeelte van de dubbele slash controle komen. Iets als ([^\/]|\/(?!\/))+ zal beter werken. [^\/] matched alles behalve een slash en daarom gaat hij, bij een slash, naar de dubbele slashes kijken.
Als je controleert of het pad bestaat bij het uploaden of verwijzen (file_exists) en bij een false de suggesties geeft van wat er fout is ben je al een heel eind. (geen of dubbele slashes, verkeerd gebruikte tekens, lijstje met toegestane tekens geven, etc.)
Bij het aanmaken creëren van zo'n folder heb je wel een regex nodig zoals dit. Geef aan wat je mooi vindt en that's it.
@Crispijn, zo'n mvc path is anders dan een normale directory structuur. Uit /post/hello-world/12/ kun je bijv. de controller Post die 2 parameters, hello-world en 12, heeft. Dus file_exists zou niet kunnen.
Ook is de 'folder' structuur op deze site niks meer dan een iets te grootte structuur gemaakt met htaccess...
@Crispijn: Dat is precies wat ik doe. Als het pad fout gaat dan geef ik precies zo'n foutmelding zoals jij zegt. Ik heb nu zoals je ziet de preg_match ietsjes aangepast. In 1e instantie controleerde ik ook op foute tekens, maar nu controleer ik enkel nog of er geen dubbele slashes in staan en of het pad eindigt op een slash.
Het controleren op ongeldige tekens is natuurlijk heel mooi, maar ik bedacht me dat als er ongeldige tekens instaan de directory ook niet gevonden zal worden. Dus dat stukje controle heb ik nu laten vervallen.
Dus eerst was dit niet toegestaan:
$pad = '/mijn/$pad/;
Omdat er een ongeldig teken in zat, namelijk het $ teken, werd het pad afgekeurd. Echter... ik doe ook een file_exists check. Vanwege het ongeldige teken in het pad zal de file_exists niet slagen. Daarom heb ik die controle op ongeldige tekens laten vervallen.
Goede keuze denk je?
@Wouter: in dit geval gaat het om een "echt" pad :)