Incluir archivos que distingan entre mayúsculas y minúsculas en Windows desde PHP

StackOverflow https://stackoverflow.com/questions/63599

  •  09-06-2019
  •  | 
  •  

Pregunta

Tenemos un problema al usar el PEAR bibliotecas en Windows de PHP.

Pear contiene muchas clases, estamos haciendo uso de unas cuantas, una de las cuales es la clase Mail que se encuentra en Mail.php.Usamos PEAR en la ruta, en lugar de proporcionar la ruta explícita completa a archivos PEAR individuales:

require_once('Mail.php');

En vez de:

require_once('/path/to/pear/Mail.php');

Esto causa problemas en el módulo de administración del sitio, donde hay un mail.php archivo (utilizado para enviar correos electrónicos a los usuarios).Si estamos en una pantalla administrativa que envía un correo electrónico (como la pantalla de administración de usuarios que puede generar y enviar por correo electrónico nuevas contraseñas aleatorias a los usuarios cuando son aprobados desde la cola de moderación) e intentamos incluir Mail.php "accidentalmente" incluimos mail.php.

Sin cambiar para anteponer la ruta completa a la instalación de PEAR que requiere explícitamente los módulos PEAR (no estándar, generalmente instala PEAR en su ruta...), ¿hay alguna manera de hacer que PHP en Windows requiera archivos que distingan entre mayúsculas y minúsculas?

Nosotros mismos estamos agregando la ruta PEAR a la ruta de inclusión, por lo que tenemos control sobre el orden de las rutas.También reconocemos que debemos evitar el uso de nombres de archivos que entren en conflicto con los nombres PEAR independientemente del caso, y en el futuro lo haremos.Sin embargo, esta página (que no es un archivo de inclusión, sino un controlador) ha estado en el repositorio durante algunos años y los complementos generan URL específicamente para proporcionar enlaces/redirecciones a esta página durante su procesamiento.

(Admitimos Apache, Microsoft IIS, LightHTTPD y Zeus, usando PHP 4.3 o posterior (incluido PHP5))

¿Fue útil?

Solución

tener 2 archivos con el mismo nombre en la ruta de inclusión no es una buena idea; cambie el nombre de sus archivos para que los archivos que escribió tengan nombres diferentes a los de las bibliotecas de terceros.De todos modos, para su situación actual, creo que al cambiar el orden de las rutas en su ruta de inclusión, puede solucionar este problema.PHP busca los archivos en las rutas de inclusión, uno por uno.cuando el archivo requerido se encuentra en la ruta de inclusión, PHP dejará de buscar el archivo.entonces, en la sección de administración de su aplicación, si desea incluir el archivo PEAR Mail, en lugar del mail.php que escribió, cambie su ruta de inclusión para que la ruta PEAR esté antes del directorio actual.haz algo como esto:

<?php
  $path_to_pear = '/usr/share/php/pear';
  set_include_path( $path_to_pear . PATH_SEPARATOR . get_include_path() );
?>

Otros consejos

Como es una cuestión a nivel del sistema operativo, no creo que haya una manera fácil de hacerlo.

Podrías intentar cambiar tu inclusión de include('Mail.php'); a include('./Mail.php');, pero no estoy seguro de si eso funcionará en una máquina de Windows (al no tener una con PHP para probar).

Si estás usando PHP 4, puedes aprovechar este bicho.Por supuesto que es una solución complicada...

O simplemente podrías cambiar el nombre de tu archivo mail.php por otro...

Estoy bastante seguro de que este problema se debe al código NTFS en el subsistema Win32.Si utiliza un sistema de archivos instalable (IFS) Ext2, debería distinguir entre mayúsculas y minúsculas en esa unidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top