Включение файлов с учетом регистра в Windows из PHP - PullRequest
0 голосов
/ 15 сентября 2008

У нас проблема с использованием библиотек PEAR в Windows из PHP.

Груша содержит много классов, мы используем несколько классов, одним из которых является класс Mail, найденный в Mail.php. Мы используем PEAR на пути, вместо того, чтобы указывать полный явный путь к отдельным файлам PEAR:

require_once('Mail.php');

Вместо:

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

Это вызывает проблемы в модуле администрирования сайта, где есть файл mail.php (используется для отправки почты пользователям). Если мы находимся на административном экране, который отправляет электронное письмо (например, экран администрирования пользователей, который может генерировать и отправлять новые случайные пароли пользователям по электронной почте, когда они утверждаются из очереди на модерацию), и мы пытаемся включить Mail.php, мы «случайно» включаем mail.php.

Не изменяя предваряющий полный путь к установке PEAR, явно требующий наличия модулей PEAR (нестандартный, обычно вы устанавливаете PEAR по своему пути ...), есть способ заставить PHP в Windows требовать, чтобы файлы чувствительны к регистру

Мы сами добавляем путь PEAR к пути включения, поэтому имеем контроль над порядком пути. Мы также признаем, что нам следует избегать использования имен файлов, которые конфликтуют с именами PEAR, независимо от регистра, и в будущем так и будет. Однако эта страница (которая не является включаемым файлом, а контроллером) уже несколько лет находится в хранилище, и плагины специально генерируют URL-адреса для предоставления ссылок / перенаправлений на эту страницу при их обработке.

(Мы поддерживаем Apache, Microsoft IIS, LightHTTPD и Zeus, используя PHP 4.3 или более позднюю версию (включая PHP5))

Ответы [ 4 ]

3 голосов
/ 15 сентября 2008

Поскольку это уровень ОС, я не верю, что есть простой способ сделать это.

Вы можете попытаться изменить свое включение с include('Mail.php'); на include('./Mail.php');, но я не уверен, сработает ли это на Windows-боксе (не имея такого с PHP для тестирования).

1 голос
/ 15 сентября 2008

иметь 2 файла с одним и тем же именем в пути включения - не очень хорошая идея, переименуйте ваши файлы, чтобы записанные вами файлы имели разные имена из сторонних библиотек. в любом случае, для вашей текущей ситуации, я думаю, изменив порядок путей в вашем пути включения, вы можете это исправить. PHP ищет файлы в путях включения, один за другим. когда требуемый файл найден во включаемом пути, PHP прекратит поиск файла. поэтому в разделе администрирования вашего приложения, если вы хотите включить почтовый файл PEAR, вместо mail.php, который вы написали, измените ваш путь включения так, чтобы путь PEAR находился перед текущим каталогом. сделать что-то вроде этого:

<?php
  $path_to_pear = '/usr/share/php/pear';
  set_include_path( $path_to_pear . PATH_SEPARATOR . get_include_path() );
?>
0 голосов
/ 17 сентября 2008

Я вполне уверен, что эта проблема вызвана кодом NTFS в подсистеме Win32. Если вы используете устанавливаемую файловую систему Ext2 (IFS), вы должны получить регистр символов на этом диске.

0 голосов
/ 15 сентября 2008

Если вы используете PHP 4, вы можете воспользоваться этой ошибкой. Конечно, это грязное решение ...

Или вы можете просто переименовать файл mail.php во что-то другое ...

...