Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

file_exists не чувствителен к регистру

312
14 августа 2009 года
dead_star
392 / / 26.11.2006
столкнулся с проблемой, что винда не чувствительна к регистру имен файлов и директорий
в результате и функция file_exists не чувствительна к регистру

я проверяю с помощью этой функции установлен ли у меня компонент
имя файла компонента имеет вид class.ComponentName.php
в файле класс с именем ComponentName

пример проверки
 
Код:
// код пишу на глазок
$classname = "class.".$ComponentName.".php";
if (file_exists(ROOT.$path.$classname)){
 include_once(ROOT.$path.$classname);
 $component = $ComponentName;
}

тут по большей части проблем нет так как php тоже не чувствителен к регистру имен классов и функций

но боюсь, что где-нибудь из-за этого может возникнуть баг

единственное что мне приходит в голову как решение этой проблемы
так это просканить директорию и получить список всех установленных компонентов,
и ориентируясь на этот список уже подгружать компоненты
но это получается жуткая заморочка и мне так делать не хочется
285
14 августа 2009 года
Romik
479 / / 24.11.2002
не делай
312
14 августа 2009 года
dead_star
392 / / 26.11.2006
Цитата: Romik
не делай


хороший ответ :D

но вопрос в том
как мне сделать, так что бы загрузчик компонентов был чувствителен к регистру?
если не делать, так как я предложил то как

собственно вспомнил пример бага который может возникнуть

Код:
// неверное название
$ComponentName = "TeSt"

// ...
// загруска компонента упешно отработает
$classname = "class.".$ComponentName.".php";
if (file_exists(ROOT.$path.$classname)){
 include_once(ROOT.$path.$classname);
 $SuperClass->$component = $ComponentName;
}

// ...
// тут будет ошибка Notice объект не найден и метод вызван не будет
// так как методы классов в пыхе чувствительны к регистру
$SuperClass->test->run();
285
14 августа 2009 года
Romik
479 / / 24.11.2002
ну очевидно, что не стоит использовать регистрозивисимые имена файлов и компонентов. Используй lower_case. На сколько понимаю, делаешь свою систему компонентов? Т.е. в данном случае ты решаешь какова будет архитектура. Так в чём проблема, зачем её усложнять?
312
14 августа 2009 года
dead_star
392 / / 26.11.2006
собственно я впервые столкнулся с этой проблемой
так как всегда передавал правильные имена компонентов
или на стадии его использования имел доступ к имени, под которым он был загружен
в одном из загрузчиков я добавил к параметрам переменную $usename имя, под которым этот компонент будет использоваться

но сейчас столкнулся с ситуацией, что имя компонента, под которым он будет вызван, формируется на верхнем уровне и может быть недоступно на уровне использования

приведение, вызываемое имя к нижнему регистру влечет за собой определенные неудобства, так как имя компонента может состоять из одного и более слов то обращаться к компоненту по имени sumelementtorunerconsole не слишком удобно

в принципе проблему можно решить за счет $usename, но эта переменная тоже формируется на верхнем уровне

PS может, я и зря так дергаюсь, но просто как-то дернуло обнаружение этого бага в моей системе
16K
14 августа 2009 года
k0t
97 / / 23.04.2007
Если что-то внезапно не работает как хотелось бы - читайте коментарии к функциям на php.net, скорее всего не вы первый с этим столкнулись и решение уже есть.
http://ru.php.net/manual/en/function.file-exists.php#74159
312
14 августа 2009 года
dead_star
392 / / 26.11.2006
Цитата: k0t
Если что-то внезапно не работает как хотелось бы - читайте коментарии к функциям на php.net, скорее всего не вы первый с этим столкнулись и решение уже есть.
http://ru.php.net/manual/en/function.file-exists.php#74159


боюсь этот комент не по теме
самый близкий это вот этот пост и то только после небольшой модернизации

Код:
function is_windoes(){
 return (PHP_OS=="WIN32") || (PHP_OS=="WINNT") || (PHP_OS=="Windows");
}

function register_file_exists($filename){
 if (!is_windoes()){
  if (file_exists($filename)) return true;
 }
 $files = glob(dirname($filename) . "/*");
 foreach($files as $file){
  if ($file == $filename) return true;
 }
 return false;
}
13
14 августа 2009 года
RussianSpy
3.0K / / 04.07.2006
Цитата: dead_star
столкнулся с проблемой, что винда не чувствительна к регистру имен файлов и директорий


Вообще мне казалось что это всем известно. Это вообще одна из тех проблем, с которыми сталкиваются только-только начинающие новички.

Я удивлен, что вы этого не знали. Интересно, сколько еще банальных фактов вам неизвестны...


PS и вообще мне непонятно зачем делать регистрозависимые имена? Хочется лишних проблем в разработке кода?

312
14 августа 2009 года
dead_star
392 / / 26.11.2006
Цитата: RussianSpy
Вообще мне казалось что это всем известно. Это вообще одна из тех проблем, с которыми сталкиваются только-только начинающие новички.


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

Цитата: RussianSpy
PS и вообще мне непонятно зачем делать регистрозависимые имена? Хочется лишних проблем в разработке кода?


согласен с тобой
есть такое понятие как стандарт оформления кода
раньше я использовал стандарт именования функций как в php (register_file_exists)
сейчас же я эксперементирую со стилем именования классов и функций примером которого будет JavaScript (registerFileExists)

13
14 августа 2009 года
RussianSpy
3.0K / / 04.07.2006
Не смешите меня... Какие еще стандарты. Есть просто несколько общепринятых методов именования, которые выстраданы многими тысячами проектов и сотнями тысяч человеко-часов работы.

От того как вы называете файл лучше работать он не станет. Полезнее сосредоточится на качестве и эффективности кода, чем парится по поводу прописных и строчных букв в названии файлов.

К тому же блок обработки исключений в вашем коде лишь утяжеляет (немного, конечно, но все же) проект, принося никому не нужные действия.
312
14 августа 2009 года
dead_star
392 / / 26.11.2006
в общем, общая мысль сводится к тому, что мне стоит пересмотреть архитектуру модуля
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог