Ola,

Een vraagje... ik ben even vergeten hoe het nu ook alweer zat.

Normaal ziet een pad er zo uit:

/pad/foo

Nu meen ik dat het soms zo kan zijn dat soms de slashes andersom staan:

\pad\foo

En dat dat dan automatisch wordt gecorrigeerd naar /pad/foo.

Ik heb even getest door een directory te verwijderen. Met forward slashes lukt dat gewoon, maar met backward slashes werkt het niet.

Dus ik ben even benieuwd of iemand kan uitleggen hoe dat ook alweer zat. Is een pad met backward slashes altijd ongeldig, of kan dit op sommige systemen ook geldig zijn?
Backslashes zijn een dingetje van Windows. Een fatsoenlijk besturingssysteem zal forward slashes gebruiken. ;-)

In een Windows-omgeving kun je ook gewoon met forward slashes werken. Wil je toch met backslashes werken, let dan op dat je die moet escapen: \\pad\\foo
Ah oke...

Stel nu dat ik de trailing slash van een pad wil strippen (en ik weet niet wat het pad is).

Is dit dan een goede manier?

$path = rtrim($path, DIRECTORY_SEPARATOR);

Of moet ik zorgen dat zowel een forward als backward slash wordt gestript?

$path = rtrim($path, '/\\');

Mijn gevoel zegt dat de 1e optie (met DIRECTORY_SEPARATOR) juist is, maar kunnen jullie dit bevestigen?

[offtopic]
Mooie avatar Willem :)
[/offtopic]
Bij mij lijkt rtrim($path, DIRECTORY_SEPARATOR); alleen backslashes te trimmen, dan zou je beter je 2e optie kunnen gebruiken als je niet weet wat je $path wordt.
>> Bij mij lijkt rtrim($path, DIRECTORY_SEPARATOR); alleen backslashes te trimmen

Dat is raar? Bij mij trimt ie alleen forward slashes. Maar als het goed is, moet ie dus datgene trimmen wat op jouw server van toepassing is.

Welk OS gebruik jij? En wat verschijnt er op jouw scherm als je echo DIRECTORY_SEPARATOR; doet?
Ozzie PHP op 05/02/2014 15:18:27

>> Bij mij lijkt rtrim($path, DIRECTORY_SEPARATOR); alleen backslashes te trimmen

Dat is raar? Bij mij trimt ie alleen forward slashes. Maar als het goed is, moet ie dus datgene trimmen wat op jouw server van toepassing is.

Welk OS gebruik jij? En wat verschijnt er op jouw scherm als je echo DIRECTORY_SEPARATOR; doet?

Klopt helemaal. Ik had het lokaal op Windows getest, vandaar de backslash, op Unix geeft ie inderdaad een forward slash. Excuses voor de verwarring :)
Ah oké. Geen probleem :)

Maar dan kan ik dus gewoon zonder problemen de versie met DIRECTORY_SEPARATOR gebruiken toch?
Als jou $path door het OS wordt gegenereerd lijkt me dat wel ja.
Oké... ja, het wordt gegenereerd, of het komt uit een config bestand, en dan kan ik zelf de juiste vorm kiezen. Mooi, dan laat ik het zo. Thanks :)
Zoals ik al zei: Je moet data normalizen voordat je ze gaat gebruiken in je code. Dus maak een functie die alle backward slashes omzet naar forward slashes en die de trailing slash weghaalt. Ga dan pas werken met de slashes.

DIRECTORY_SEPARATOR zou totaal geen nut hebben als het slechts / of \ betekende. Het mooie van die constante is dat hij op unix systems / is en in windows \.

Merk overigens op dat windows je altijd backward slashes zal geven, maar hij prima overweg kan met forward slashes.

Reageren