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
Форумы портала PHP.SU :: Версия для печати :: Как вывести формат файла в переменную?
Форумы портала PHP.SU » PHP » Программирование на PHP » Как вывести формат файла в переменную?

Страниц (1): [1]
 

1. LEONeso - 08 Июля, 2010 - 18:08:20 - перейти к сообщению
Как вывести формат файла в переменную?
Имя файла неизвестно, формат так же.

Пытаюсь сделать регулярное выражение под распознание формата (своего рода, условие допуска файла, отображать или нет)

Недоделанный отрывок кода для наглядности.
PHP:
скопировать код в буфер обмена
  1.  
  2. if (strpos($file, reg_match ('/*.[n,g,i,f,j,p,e]{3,4}\i/',),1))
  3.  
2. mSec - 08 Июля, 2010 - 21:09:21 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.         function ext($str)
  2.         {
  3.                 $pos=strrpos($str,'.');
  4.                 return substr($str,$pos+1,strlen($str)-$pos);
  5.         }
  6.         $fname='/path/to/file/with.dot/picture.jpg';
  7.         echo ext($fname);
3. LEONeso - 09 Июля, 2010 - 02:25:33 - перейти к сообщению
mSec пишет:
PHP:
скопировать код в буфер обмена
  1.         function ext($str)
  2.         {
  3.                 $pos=strrpos($str,'.');
  4.                 return substr($str,$pos+1,strlen($str)-$pos);
  5.         }
  6.         $fname='/path/to/file/with.dot/picture.jpg';
  7.         echo ext($fname);

это не то, ведь имя файла и его формат неизвестен. я пытаюсь сделать регулярное выражение, которое будет контролировать форматы... возможно я иду не по тому пути или вообще не возможно это сделать. Уж заинтересовался я попытаться, что-то написать, чтоб сам делал, зная только главную папку и дальше ничего неизвестно (вложенные папки и файлы).
4. JustUserR - 09 Июля, 2010 - 02:39:30 - перейти к сообщению
LEONeso пишет:
Как вывести формат файла в переменную?
Имя файла неизвестно, формат так же.
Шаблоны регулярных выражений являются самыми обычными строками и могут быть сгенерированы и использованы для проверки по время выполнения PHP-скрипта - например в тот момент когда станет известным формат файла
5. LEONeso - 09 Июля, 2010 - 13:31:00 - перейти к сообщению
JustUserR пишет:
LEONeso пишет:
Как вывести формат файла в переменную?
Имя файла неизвестно, формат так же.
Шаблоны регулярных выражений являются самыми обычными строками и могут быть сгенерированы и использованы для проверки по время выполнения PHP-скрипта - например в тот момент когда станет известным формат файла

Мне казалось он сам делает допуск к использованию данного формате при считывании символов (я указываю нужные буквы без учета регистра и их кол-во 3-4) т.е. реч идет о изображениях. png, gif, jpeg, jpg, PNG, GIF. JPEG, JPG.
т.е. регулярное выражение ведь может фактически все делать с текстом, даже не зная какой он будет или я ошибаюсь?

Я пытаюсь избавится от того, как я в начале сделал:
PHP:
скопировать код в буфер обмена
  1.  
  2.                                         if (strpos($file, '.gif',1)||strpos($file, '.jpg',1)||strpos($file, '.jepg',1)||strpos($file, '.png',1)||strpos($file, '.GIF',1)||strpos($file, '.JPG',1)||strpos($file, '.JEPG',1)||strpos($file, '.PNG',1))
  3.  

(Добавление)
переменная file - это название файла, которое не известно, код берет его из папки в котором он находится сейчас, адрес папки также выискивается и передается с помощью массива _get.

Известно только главная папка, все другие папки неизвесны, код проверяет на наличие папок и выводит их и т.д. до папки с изображением, своего рода "Проводник" в win. Можно еще объясниться как передвижение по папкам из браузера.

- главная (известна)
-- второстепенная (не известна)
--- вложенная (не известна)
--- вложенная (не известна)
---- изображения (не известны)
--- вложенная (не известна)
---- изображения (не известны)
-- второстепенная (не известна)
... и т.п.
6. Uchkuma - 09 Июля, 2010 - 14:13:50 - перейти к сообщению
Если вам нужно отобразить картинки с определенным расширением, то можно сделать так:
PHP:
скопировать код в буфер обмена
  1. $allow = array('jpg','jpeg','JPG','JPEG','gif','GIF');
  2.  
  3. while($file = readdir($dir)){
  4. if(!preg_match('/[^.]+$/i', $file, $ext)) continue;
  5. $ext = $ext[0];//формат файла в переменной
  6. if(in_array($ext, $allow)) echo $file.'<br>';
  7. }
7. LEONeso - 10 Июля, 2010 - 02:44:13 - перейти к сообщению
Uchkuma пишет:
Если вам нужно отобразить картинки с определенным расширением, то можно сделать так:
PHP:
скопировать код в буфер обмена
  1. $allow = array('jpg','jpeg','JPG','JPEG','gif','GIF');
  2.  
  3. while($file = readdir($dir)){
  4. if(!preg_match('/[^.]+$/i', $file, $ext)) continue;
  5. $ext = $ext[0];//формат файла в переменной
  6. if(in_array($ext, $allow)) echo $file.'<br>';
  7. }

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

Моя очередная попытка, увенчалась провалом:
PHP:
скопировать код в буфер обмена
  1. if (strpos($file,'/+.[n,g,i,f,j,p,e]{3}$/',1))

$file - полноценный адрес .dir/dir/dir - на конце нет слеша
--
возможно регулярное выражение должно быть таким: \//\+./([n,g,i,f,j,p,e]{3})\i$/
8. JustUserR - 10 Июля, 2010 - 03:06:16 - перейти к сообщению
LEONeso пишет:
Мне казалось он сам делает допуск к использованию данного формате при считывании символов (я указываю нужные буквы без учета регистра и их кол-во 3-4) т.е. реч идет о изображениях. png, gif, jpeg, jpg, PNG, GIF. JPEG, JPG.
т.е. регулярное выражение ведь может фактически все делать с текстом, даже не зная какой он будет или я ошибаюсь?
Регулярное выражение является специальным шаблоном на основе которого может анализировать строка - причем в отличие от строковых функций данный шаблон не обязательно должен быть привязан к подстрокам или конкретным позициям в строке и может выполнять динамический поиск
К примеру в вашем случае можно организовать поиск расширения файла - и потом сравнить его с одним из разрешенных значений
LEONeso пишет:
Моя очередная попытка, увенчалась провалом:
Вы же используете обычную строковую функцию заместо требуемой функции регулярного выражения типа preg_match - обратите внимание на то что в шаблоне все данные должны быть проэкранированы правильным образом - и для организации использования классов символов кодировка также должна совпадать со строковыми представлениями
9. Uchkuma - 10 Июля, 2010 - 12:29:10 - перейти к сообщению
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' - так верно.
10. Ch_chov - 10 Июля, 2010 - 13:08:27 - перейти к сообщению
Цитата:
я хотел использовать регулярное выражение т.к. в данный момент его само-изучаю
Всему свое место. Там где есть возможность используйте строковые функции, они обычно быстрее выполняются чем регулярные выражения.

А вообще, всегда лучше сначала поискать стандартную функцию, а не изобретать велосипед.
11. ALEN - 10 Июля, 2010 - 19:28:44 - перейти к сообщению
Самый простой и удобный способ:
end(explode(".",$file)
12. JustUserR - 12 Июля, 2010 - 14:47:54 - перейти к сообщению
ALEN пишет:
Самый простой и удобный способ
Все-таки если рассматривать самый эффективный способ то это должно быть использование функций strrpos и substr - поскольку в нем не происходит поиска и извлечения лишних данных
'/\.(jpg|jpeg|png|gif)$/i' - так верноКстати в Perl такое регулярное выражение не будет работать должным образом поскольку оператор ИЛИ | там имеет больший приоритет над группой символов - и сами расширения в списка также надо было бы взять в круглые скобки

 

Powered by ExBB FM 1.0 RC1