2008-09-15 5 views
0

Nous avons un problème en utilisant les bibliothèques PEAR sur Windows de PHP.Y compris les fichiers sensibles à la casse sur Windows à partir de PHP

La poire contient de nombreuses classes, nous en utilisons quelques-unes, dont la classe Mail qui se trouve dans Mail.php. Nous utilisons PEAR sur le chemin, plutôt que de fournir le chemin d'accès explicite complet aux fichiers PEAR individuels:

require_once('Mail.php'); 

Plutôt que:

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

Cela provoque des problèmes dans le module d'administration du site, où il y a un fichier mail.php (utilisé pour envoyer des mails aux utilisateurs). Si nous sommes dans un écran administratif qui envoie un courriel (tel que l'écran d'administration des utilisateurs qui peut générer et envoyer de nouveaux mots de passe aléatoires aux utilisateurs lorsqu'ils sont approuvés dans la file d'attente de modération), nous incluons «accidentellement» le courrier. php. Sans changer de préfixe le chemin d'accès complet à l'installation PEAR nécessitant explicitement les modules PEAR (non standards, typiquement vous installerez PEAR sur votre chemin ...) est-il possible d'imposer PHP sous Windows pour exiger des fichiers Sensiblement?

Nous ajoutons nous-mêmes le chemin PEAR au chemin d'inclusion, afin d'avoir un contrôle sur l'ordre du chemin. Nous reconnaissons également que nous devrions éviter d'utiliser des noms de fichiers qui se heurtent aux noms PEAR, quel que soit le cas, et à l'avenir le feront. Cette page (qui n'est pas un fichier inclus, mais un contrôleur), est dans le référentiel depuis quelques années, et les plugins génèrent spécifiquement des URLs pour fournir des liens/redirections vers cette page dans leur traitement.

(Nous soutenons Apache, Microsoft IIS, LightHTTPD et Zeus, en utilisant PHP 4.3 ou version ultérieure (y compris PHP5))

Répondre

1

ayant 2 fichiers avec le même nom dans le chemin d'inclusion est pas une bonne idée , renommez vos fichiers pour que les fichiers que vous avez écrits aient des noms différents de ceux des bibliothèques tierces. En tout cas pour votre situation actuelle, je pense qu'en changeant l'ordre des chemins dans votre chemin d'inclusion, vous pouvez corriger cela. PHP recherche les fichiers dans les chemins d'inclusion, un par un. Lorsque le fichier requis est trouvé dans le chemin include, PHP va arrêter de chercher le fichier. Par conséquent, dans la section d'administration de votre application, si vous souhaitez inclure le fichier courrier PEAR, au lieu du fichier mail.php que vous avez écrit, modifiez votre chemin d'inclusion afin que le chemin PEAR se trouve avant le répertoire en cours. faire quelque chose comme ceci:

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

Je n'ai pas assez de réputation pour éditer, mais, en substance, c'est une réponse idéale: 1) Ne pas entrer dans le problème que nous avons (faire des noms uniques) 2) Travailler autour de lui en peaufinant l'ordre d'inclure d'utiliser PEAR d'abord car nos fichiers ne sont pas inclus, mais les contrôleurs. – THEMike

3

Comme il est une chose de niveau OS, je ne crois pas qu'il y ait un moyen facile de le faire.

Vous pouvez essayer de changer votre inclusion de include('Mail.php'); à include('./Mail.php');, mais je ne suis pas certain que cela fonctionnera sur une boîte de Windows (ne pas avoir un avec PHP pour tester).

+0

Confirmé. C'est une chose du système d'exploitation. Windows n'est pas sensible à la casse quand il s'agit de noms de fichiers, ce qui n'est pas possible. –

+0

Ceci est vrai, et cela fonctionnerait, nous incluons nos propres fichiers include avec des chemins complets, cependant, notre mail.php est un contrôleur. Voir http://stackoverflow.com/questions/63599/including-files-case-sensitively-on-windows-from-php#65937 – THEMike

0

Si vous utilisez PHP 4, vous pouvez profiter du bug this. Bien sûr qui est une solution en désordre ...

Ou vous pouvez simplement renommer votre fichier mail.php à quelque chose d'autre ...

0

Je suis assez certain que ce problème est causé par le code NTFS dans le sous-système Win32. Si vous utilisez un système de fichiers installable (IFS) Ext2, vous devez activer la sensibilité à la casse sur ce lecteur.

Questions connexes