Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> определение расширения файла jpg png, функция checkext неверно определяет расширение
silenblock  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 5
Пользователь №: 30799
На форуме: 5 лет, 7 месяцев, 7 дней
Карма:




Добрый день! Прошу заранее не бить за корявый код. Я только учусь. И Вот чисто случайно выявилась одна такая проблема. Написал код для проверки разрешенных файлов.

function chek_ext($f)
{
$vext=array("JPEG","jpeg","JPG","jpg","GIF","gif","PNG","png","DOC","doc","RAR","rar","ZIP","zip","TXT","txt","PDF","pdf");
foreach ($vext as $key => $value) {
$exts=checkext($f['name'],$value);
if ( checkext($f['name'],$value)==1){$this->ext=$value;}

}


return $this->ext;
}


Так вот когда заправляю ему файл file.jpg на выходе $this->ext получается png. Почему так происходит? Я понимаю, что можно в нете взять норм код, но как всегда хочется самому на велике покататься...



Спустя 6 минут, 48 секунд (14.12.2011 - 15:29) bulgakov написал(а):
То ли вы неполный код привели то ли я ничего не понимаю:
function chek_ext($f)
{
$vext=array("JPEG","jpeg","JPG","jpg","GIF","gif","PNG","png","DOC","doc","RAR","rar","ZIP","zip","TXT","txt","PDF","pdf");
foreach ($vext as $key => $value) {
$exts=checkext($f['name'],$value); // что это за функция checkext откуда она взялась?
if ( checkext($f['name'],$value)==1){$this->ext=$value;} // почему равно еденице? что тут делает $this? если это класс то где определение класса?

}

return $this->ext; // опять $this я не вижу тут ооп
}

Спустя 9 минут, 51 секунда (14.12.2011 - 15:38) silenblock написал(а):

function chek_ext($f)
{
$vext=array("JPEG","jpeg","JPG","jpg","GIF","gif","PNG","png","DOC","doc","RAR","rar","ZIP","zip","TXT","txt","PDF","pdf");
foreach ($vext as $key => $value) {
if ( checkext($f['name'],$value)){$this->ext=$value;} //можно и так

}

return $this->ext;

}

в класе определана переменная $this->ext которую и возвращает функция

$f - это передаваемый функции файл.
вопрос: почему функция checkext сравнивая расширение файла сначала верно находит, что он jpg, а потом соглашается и с тем, что он png?

Спустя 3 минуты, 48 секунд (14.12.2011 - 15:42) bulgakov написал(а):
Цитата
вопрос: почему функция checkext сравнивая расширение файла сначала верно находит, что он jpg, а потом соглашается и с тем, что он png?

Ответный вопрос, а где описание функции checkext? Я вижу только функцию chek_ext()? И я так и не понял, вы описали функцию или метод класса? так как это разные вещи, и $this->ext это НЕ ПЕРЕМЕННАЯ а СВОЙСТВО ЭКЗЕМПЛЯРА КЛАССА которого я в вашем коде не наблюдаю.

Спустя 10 минут, 41 секунда (14.12.2011 - 15:53) silenblock написал(а):
Цитата (bulgakov @ 14.12.2011 - 12:42)
Цитата
а где описание функции checkext?


Это каким мне надо быть идиотом! ТОРМОЗ!!!! это самописная функция, которую я взял 100 лет назад и по своей торомзнутости, думал, что она встроенная!!!! ПОЗОР МНЕ. Только тему зря открыл!
СПАСИБО что раскрыли глаза. Ща разберусь с что к чему.

Спустя 4 минуты (14.12.2011 - 15:57) bulgakov написал(а):
silenblock
Да ладно) Бывает, я тоже с перепугу полез на php.net искать эту функцию, а уже после того как не нашел спросил Вас.

Спустя 6 минут, 50 секунд (14.12.2011 - 16:04) silenblock написал(а):
А вот по поводу $this->ext это НЕ ПЕРЕМЕННАЯ а СВОЙСТВО ЭКЗЕМПЛЯРА КЛАССА
если в начале класса я пишу private $ext; то это правильно называется СВОЙСТВО ЭКЗЕМПЛЯРА КЛАССА? Теорию я читаю сквозь пальцы, все больше стараюсь разбирать чужой код. И на примерах уже пробую решать свои задачи. Еще раз спасибо за быстрый ответ.

Спустя 1 минута, 16 секунд (14.12.2011 - 16:05) ИНСИ написал(а):
Я бы сделал чуть по другому проверку:
function chek_ext($file) {
$arr = array('jpeg','jpg','png'); // типы файлов по одному разу в нижнем регистре :)
$ext = pathinfo($file, PATHINFO_EXTENSION);

$this->ext = (in_array($ext, $arr) ? $ext : '');
return $this->ext;
}

Спустя 7 минут, 31 секунда (14.12.2011 - 16:13) bulgakov написал(а):
silenblock
Почитайте. $this->ext, это доступ к свойству класса ext из методов класса. Вообщем почитаете.

Спустя 7 минут, 46 секунд (14.12.2011 - 16:20) silenblock написал(а):
Переписал пока так:

function chek_ext($f)
{
$vext=array("JPEG","jpeg","JPG","jpg","GIF","gif","PNG","png","DOC","doc","RAR","rar","ZIP","zip","TXT","txt","PDF","pdf");
foreach ($vext as $key => $value)
{
if (preg_replace('/^.*\.(.*)$/s', '$1', $f['name'])==$value){$this->ext=$value;}
}

return $this->ext;
}

нашел здесь. Работает. А теорию почитаю обязательно! Спасибо.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса