Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как вывести формат файла в переменную?
это не то, ведь имя файла и его формат неизвестен. я пытаюсь сделать регулярное выражение, которое будет контролировать форматы... возможно я иду не по тому пути или вообще не возможно это сделать. Уж заинтересовался я попытаться, что-то написать, чтоб сам делал, зная только главную папку и дальше ничего неизвестно (вложенные папки и файлы).
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
JustUserR
Отправлено: 09 Июля, 2010 - 02:39:30
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
LEONeso пишет:
Как вывести формат файла в переменную?
Имя файла неизвестно, формат так же.
Шаблоны регулярных выражений являются самыми обычными строками и могут быть сгенерированы и использованы для проверки по время выполнения PHP-скрипта - например в тот момент когда станет известным формат файла
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
LEONeso
Отправлено: 09 Июля, 2010 - 13:31:00
Посетитель
Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010 Откуда: Россия, Москва
Помог: 1 раз(а)
JustUserR пишет:
LEONeso пишет:
Как вывести формат файла в переменную?
Имя файла неизвестно, формат так же.
Шаблоны регулярных выражений являются самыми обычными строками и могут быть сгенерированы и использованы для проверки по время выполнения PHP-скрипта - например в тот момент когда станет известным формат файла
Мне казалось он сам делает допуск к использованию данного формате при считывании символов (я указываю нужные буквы без учета регистра и их кол-во 3-4) т.е. реч идет о изображениях. png, gif, jpeg, jpg, PNG, GIF. JPEG, JPG.
т.е. регулярное выражение ведь может фактически все делать с текстом, даже не зная какой он будет или я ошибаюсь?
Я пытаюсь избавится от того, как я в начале сделал:
(Добавление)
переменная file - это название файла, которое не известно, код берет его из папки в котором он находится сейчас, адрес папки также выискивается и передается с помощью массива _get.
Известно только главная папка, все другие папки неизвесны, код проверяет на наличие папок и выводит их и т.д. до папки с изображением, своего рода "Проводник" в win. Можно еще объясниться как передвижение по папкам из браузера.
- главная (известна)
-- второстепенная (не известна)
--- вложенная (не известна)
--- вложенная (не известна)
---- изображения (не известны)
--- вложенная (не известна)
---- изображения (не известны)
-- второстепенная (не известна)
... и т.п.
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
Uchkuma
Отправлено: 09 Июля, 2010 - 14:13:50
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
Если вам нужно отобразить картинки с определенным расширением, то можно сделать так:
$file - полноценный адрес .dir/dir/dir - на конце нет слеша
--
возможно регулярное выражение должно быть таким: \//\+./([n,g,i,f,j,p,e]{3})\i$/
----- Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
JustUserR
Отправлено: 10 Июля, 2010 - 03:06:16
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
LEONeso пишет:
Мне казалось он сам делает допуск к использованию данного формате при считывании символов (я указываю нужные буквы без учета регистра и их кол-во 3-4) т.е. реч идет о изображениях. png, gif, jpeg, jpg, PNG, GIF. JPEG, JPG.
т.е. регулярное выражение ведь может фактически все делать с текстом, даже не зная какой он будет или я ошибаюсь?
Регулярное выражение является специальным шаблоном на основе которого может анализировать строка - причем в отличие от строковых функций данный шаблон не обязательно должен быть привязан к подстрокам или конкретным позициям в строке и может выполнять динамический поиск
К примеру в вашем случае можно организовать поиск расширения файла - и потом сравнить его с одним из разрешенных значений
LEONeso пишет:
Моя очередная попытка, увенчалась провалом:
Вы же используете обычную строковую функцию заместо требуемой функции регулярного выражения типа preg_match - обратите внимание на то что в шаблоне все данные должны быть проэкранированы правильным образом - и для организации использования классов символов кодировка также должна совпадать со строковыми представлениями
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Uchkuma
Отправлено: 10 Июля, 2010 - 12:29:10
Участник
Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010 Откуда: Киров
Помог: 6 раз(а)
LEONeso пишет:
но я хотел использовать регулярное выражение
вот регулярное выражение, которое находит расширение файла:
Uchkuma пишет:
preg_match('/[^.]+$/i', $file, $ext)
JustUserR пишет:
Вы же используете обычную строковую функцию заместо требуемой функции регулярного выражения типа preg_match
это раз
LEONeso пишет:
'/+.[n,g,i,f,j,p,e]{3}$/'
в символьных классах символы перечисляются без запятой.
Даже если составить регулярное выражение несколько правильней, скажем так '/\.([ngifjpe]{3,4})$/i', то под него попадут и другие расширения из различных последовательностей этих букв, не являющиеся изображением. '/\.(jpg|jpeg|png|gif)$/i' - так верно.
Ch_chov
Отправлено: 10 Июля, 2010 - 13:08:27
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
Цитата:
я хотел использовать регулярное выражение т.к. в данный момент его само-изучаю
Всему свое место. Там где есть возможность используйте строковые функции, они обычно быстрее выполняются чем регулярные выражения.
А вообще, всегда лучше сначала поискать стандартную функцию, а не изобретать велосипед.
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
Самый простой и удобный способ:
end(explode(".",$file)
JustUserR
Отправлено: 12 Июля, 2010 - 14:47:54
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
ALEN пишет:
Самый простой и удобный способ
Все-таки если рассматривать самый эффективный способ то это должно быть использование функций strrpos и substr - поскольку в нем не происходит поиска и извлечения лишних данных '/\.(jpg|jpeg|png|gif)$/i' - так верноКстати в Perl такое регулярное выражение не будет работать должным образом поскольку оператор ИЛИ | там имеет больший приоритет над группой символов - и сами расширения в списка также надо было бы взять в круглые скобки
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.