Separadores de directorios PHP, forzando barra diagonal; no intrusivo

Cada vez que trabajo con PHP (a menudo ) normalmente trabajo en una caja de Windows, sin embargo, yo ( bash ) desarrollar aplicaciones independientes de la plataforma; un punto importante de la cuestión es el uso de separadores de directorios.

Como muchos saben, haciendo cualquier trabajo del sistema de archivos en un entorno de Windows en PHP, puede usar barras diagonales en lugar de hacia atrás, y PHP lo clasifica bajo el capó. Esto está bien cuando se trata de usar cadenas literales para pasar un camino a fopen() o lo que sea; pero al recuperar rutas, ya sea __FILE__ o expandir con realpath() , las rutas recuperadas están utilizando, por supuesto, las barras diagonales apropiadas del sistema operativo. Además, he notado algunas incoherencias en las barras al final. Una o dos veces __DIR__ ha añadido uno ( una barra invertida ) y realpath() también ( prefiero la barra inclinada, pero no intermitentemente )

Esto es claramente un problema para la comparación de cadenas, porque en lugar de hacer:

 compare_somehow('path/to/file.php', __DIR__); 

En aras de la fiabilidad, tengo que ir:

 compare_somehow('path/to/file.php', rtrim(strtr(__DIR__, '\\', '/'), '/') . '/'); 

Esto parece mucho trabajo. Puedo colocarlo en una función, seguro; ahora estoy atascado con una dependencia de función arbitraria en todo mi código OO.

Entiendo que PHP no es perfecto y que se deben realizar adaptaciones, pero seguramente debe existir alguna solución agnóstica de plataforma para forzar éxitos en el sistema de archivos para recuperar rutas cortadas hacia adelante, o al menos una forma no intrusiva de introducir una función independiente de clase para este propósito.

Pregunta ( s ) de resumen:

  • ¿Existe alguna solución mágica ( aunque confiable ), pirateo o de otro modo para obligar a PHP a retroceder en las rutas del sistema de archivos recortadas, independientemente del sistema operativo del servidor?
  • Voy a suponer que la respuesta es no a lo de arriba, así que sigue adelante; ¿Qué disposiciones puedo tomar para aplicar la barra diagonal ( o la opción que sea, en realidad ) como el separador de directorios? Estoy asumiendo a través de la función de filtro antes mencionada, pero ahora, ¿dónde debería ir?

Barra diagonal para todo. Incluso si el separador de SO host es #*&@ .

Como comenté, realmente no puedo entender por qué tendrías que hacer esto (me interesaría una descripción rápida del problema específico que estás resolviendo), pero aquí hay una posible solución que utiliza el resultado de __FILE__ como ejemplo: –

 $path = str_replace('\\', '/', __FILE__); 

Esto (¿debería?) Funcionar independientemente de las * barras regresadas por el sistema operativo (creo).

Desafortunadamente, no estoy al tanto de “alguna solución mágica (aunque confiable), pirateo o de otro modo para forzar a PHP a retroceder en las rutas del sistema de archivos reducidas, independientemente del sistema operativo del servidor” que no sea este. Me imagino que podría estar envuelto en una clase de ayuda, pero eso aún te da una dependencia arbitraria en tu código.