Включение файлов с учетом регистра в Windows из PHP

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

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Pear содержит много классов, мы используем довольно много, одним из которых является класс 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 на свой path ...), есть ли способ заставить PHP в Windows требовать, чтобы файлы учитывали регистр?

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

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

Это было полезно?

Решение

наличие 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() );
?>

Другие советы

Поскольку это зависит от уровня операционной системы, я не верю, что есть простой способ сделать это.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top