Question

Nous avons un problème d'utilisation des bibliothèques PEAR sur Windows à partir de PHP .

Pear 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 explicite complet à chaque fichier PEAR:

require_once('Mail.php');

Plutôt que:

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

Cela pose des problèmes dans le module d'administration du site, où se trouve un fichier mail.php (utilisé pour envoyer des courriers aux utilisateurs). Si nous sommes dans un écran administratif qui envoie un courrier électronique (tel que l'écran d'administration utilisateur qui peut générer et envoyer de nouveaux mots de passe aléatoires aux utilisateurs lorsqu'ils sont approuvés à partir de la file d'attente de modération), nous essayons d'inclure Mail.php nous "" accidentellement " inclure mail.php.

Sans modifier le préfixe complet du chemin d'accès à l'installation PEAR, qui requiert explicitement les modules PEAR (non standard, vous installez généralement PEAR sur votre chemin ...), existe-t-il un moyen d'imposer PHP sur Windows pour exiger des fichiers sensibles à la casse ?

Nous ajoutons nous-mêmes le chemin PEAR au chemin d’inclusion, nous devons donc contrôler l’ordre des chemins. Nous reconnaissons également que nous devrions éviter d'utiliser des noms de fichiers qui entrent en conflit avec les noms PEAR quel que soit le cas, et nous le ferons à l'avenir. Cependant, cette page (qui n'est pas un fichier d'inclusion, 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 lors de leur traitement.

  

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

Était-ce utile?

La solution

avoir 2 fichiers portant le même nom dans le chemin d’inclusion n’est pas une bonne idée. Renommez vos fichiers afin que les fichiers que vous avez écrits portent des noms différents de ceux des bibliothèques tierces. de toute façon pour votre situation actuelle, je pense qu'en modifiant l'ordre des chemins dans votre chemin d'inclusion, vous pouvez résoudre ce problème. PHP recherche les fichiers dans les chemins d’inclusion un à un. Lorsque le fichier requis est trouvé dans le chemin d’inclusion, PHP cesse de le rechercher. Ainsi, dans la section d'administration de votre application, si vous souhaitez inclure le fichier PEAR Mail au lieu du fichier mail.php que vous avez écrit, modifiez votre chemin d'inclusion de sorte que le chemin PEAR se trouve avant le répertoire en cours. faire quelque chose comme ça:

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

Autres conseils

Comme il s’agit d’un problème lié au système d’exploitation, je ne pense pas qu’il existe un moyen simple de le faire.

Vous pouvez essayer de changer votre inclusion de include ('Mail.php'); en include ('./ Mail.php'); , mais je suis Je ne suis pas certain que cela fonctionnera sous Windows (sans en avoir un avec PHP).

Si vous utilisez PHP 4, vous pouvez tirer parti de this . punaise. Bien sûr, c'est une solution salissante ...

Vous pouvez également renommer votre fichier mail.php en un autre nom ...

Je suis à peu près certain que ce problème est dû au code NTFS du sous-système Win32. Si vous utilisez un système de fichiers installable Ext2, vous devez obtenir la sensibilité à la casse sur ce lecteur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top