У нас есть проблема с использованием библиотек PEAR на Windows от PHP.
Pear содержит много классов, мы используем довольно много, одним из которых является класс Mail, который есть в Mail.php. Мы используем PEAR в пути, а не предоставляем полный явный путь к отдельным файлам PEAR:
require_once('Mail.php');
Скорее, чем:
require_once('/path/to/pear/Mail.php');
Это вызывает проблемы в модуле администрирования сайта, где есть файл mail.php (используется для отправки писем пользователям). Если мы находимся на административном экране, который отправляет электронное письмо (например, на экране администрирования пользователей, который может генерировать и отправлять новые случайные пароли пользователям, когда они утверждены из очереди на модерацию), и мы пытаемся включить Mail.php, мы «случайно» включаем почту. php.
Не меняя, чтобы добавить полный путь к установке PEAR, явно требуя модули PEAR (нестандартные, обычно вы устанавливаете PEAR на свой путь ...), есть ли способ принудительно применить PHP в Windows, чтобы требовать файлы с учетом регистра?
Мы сами добавляем путь PEAR к пути включения, поэтому вы можете контролировать порядок путей. Мы также понимаем, что нам следует избегать использования имен файлов, которые конфликтуют с именами PEAR, независимо от регистра, и будем делать это в будущем. Однако эта страница (которая является не включаемым файлом, а контроллером) уже несколько лет находится в репозитории, и плагины специально генерируют URL-адреса для предоставления ссылок / перенаправлений на эту страницу при их обработке.
(We support Apache, Microsoft IIS, LightHTTPD and Zeus, using PHP 4.3 or later (including PHP5))






Поскольку это вопрос уровня ОС, я не верю, что есть простой способ сделать это.
Вы можете попробовать изменить свой include с include('Mail.php'); на include('./Mail.php');, но я не уверен, что это сработает в Windows (нет такого с PHP для тестирования).
Это правда, и это сработает, мы действительно включаем наши собственные включаемые файлы с полными путями, однако наш mail.php является контроллером. См. stackoverflow.com/questions/63599/…
Если вы используете PHP 4, вы можете воспользоваться ошибкой это. Конечно, это беспорядочное решение ...
Или вы можете просто переименовать свой файл mail.php во что-нибудь другое ...
иметь 2 файла с одинаковыми именами в пути включения - не лучшая идея, переименуйте свои файлы, чтобы файлы, которые вы написали, имели разные имена из сторонних библиотек. в любом случае для вашей текущей ситуации, я думаю, изменив порядок путей в вашем пути включения, вы можете это исправить. PHP ищет файлы во включенных путях, один за другим. когда требуемый файл будет найден в пути включения, PHP прекратит поиск файла. поэтому в разделе администрирования вашего приложения, если вы хотите включить файл PEAR Mail вместо написанного вами mail.php, измените свой путь включения так, чтобы путь PEAR находился перед текущим каталогом. сделай что-нибудь вроде этого:
<?php
$path_to_pear = '/usr/share/php/pear';
set_include_path( $path_to_pear . PATH_SEPARATOR . get_include_path() );
?>
У меня недостаточно репутации для редактирования, но, по сути, это идеальный ответ: 1) Не вдавайтесь в проблему, которая у нас есть (создайте уникальные имена) 2) Обойдите ее, настроив порядок включения, чтобы сначала использовать PEAR как наши файлы НЕ включают, но контроллеры.
Я почти уверен, что эта проблема вызвана кодом NTFS в подсистеме Win32. Если вы используете устанавливаемую файловую систему Ext2 (IFS), вы должны учитывать регистр на этом диске.
Подтвержденный. Это дело ОС. Windows просто не чувствительна к регистру, когда дело доходит до имен файлов, поэтому это невозможно.