Cuando queremos representar un directorio; podemos obtenerlo de varias formas: /home/usuario/documentos en *nix o C:\Document and Settings\Usuario\Mis Documentos en Windows. Aunque lo mismo podemos representarlo /home/usuario/documentos/ y C:\Document and Settings\Usuario\Mis Documentos\ (es lo mismo, pero con una barra al final).
El problema en PHP, viene a la hora de llamar archivos de ese directorio, hay ocasiones en las que no sabemos si la variable en donde tenemos almacenado el directorio tiene barra al final o no; entonces debemos hacer alguna función que incluya la barra correspondiente si hace falta.
Estos dos primeros script los he sacado de Jonas John Code Snippets:
1 2 3 4 5 6 7 8 9 10 11 12 | function add_ending_slash($path){ $slash_type = (strpos($path, '\')===0) ? 'win' : 'unix'; $last_char = substr($path, strlen($path)-1, 1); if ($last_char != '/' and $last_char != '\') { // no slash: $path .= ($slash_type == 'win') ? '\' : '/'; } return $path; } |
1 2 3 4 5 6 7 8 9 10 11 12 | function normalize_path($path){ // DIRECTORY_SEPARATOR is a system variable // which contains the right slash for the current // system (windows = \ or linux = /) $s = DIRECTORY_SEPARATOR; $path = preg_replace('/[\/\\\]/', $s, $path); $path = preg_replace('/'.$s.'$/', '', $path) . $s; return $path; } |
Para este último, tenemos que hacer antes:
1 |
Otras dos alternativas:
1 2 3 4 5 6 | function ending_slash($path) { $sep = (PHP_OS == 'Windows')? '\':'/'; $path .= (substr($path,-1) == $sep)? '':$sep; return $path; } |
1 2 3 4 5 6 7 | function ending_slash2($path) { $sep = (PHP_OS == 'Windows')? '\':'/'; if ($path) $path .= ($path[strlen($path)-1] == $sep)? '':$sep; return $path; } |
La última no es muy elegante, pero ahí queda. Las dos últimas son muy parecidas entre sí. Y es una función interesante para nuestra biblioteca de funciones particular.
Pingback: Bitacoras.com /