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 :: Как вывести формат файла в переменную?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: работа с файлами
LEONeso
Отправлено: 08 Июля, 2010 - 18:08:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




Как вывести формат файла в переменную?
Имя файла неизвестно, формат так же.

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

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


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
mSec
Отправлено: 08 Июля, 2010 - 21:09:21
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июль 2010  


Помог: 0 раз(а)




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);
 
 Top
LEONeso
Отправлено: 09 Июля, 2010 - 02:25:33
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




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);

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


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
JustUserR
Отправлено: 09 Июля, 2010 - 02:39:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




LEONeso пишет:
Как вывести формат файла в переменную?
Имя файла неизвестно, формат так же.
Шаблоны регулярных выражений являются самыми обычными строками и могут быть сгенерированы и использованы для проверки по время выполнения PHP-скрипта - например в тот момент когда станет известным формат файла


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
LEONeso
Отправлено: 09 Июля, 2010 - 13:31:00
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




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. Можно еще объясниться как передвижение по папкам из браузера.

- главная (известна)
-- второстепенная (не известна)
--- вложенная (не известна)
--- вложенная (не известна)
---- изображения (не известны)
--- вложенная (не известна)
---- изображения (не известны)
-- второстепенная (не известна)
... и т.п.


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
Uchkuma
Отправлено: 09 Июля, 2010 - 14:13:50
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Если вам нужно отобразить картинки с определенным расширением, то можно сделать так:
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. }

(Отредактировано автором: 09 Июля, 2010 - 14:15:09)

 
 Top
LEONeso
Отправлено: 10 Июля, 2010 - 02:44:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 499
Дата рег-ции: Янв. 2010  
Откуда: Россия, Москва


Помог: 1 раз(а)




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$/


-----
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть _опой на клавиатуру.
 
 Top
JustUserR
Отправлено: 10 Июля, 2010 - 03:06:16
Post Id



Активный участник


Покинул форум
Сообщений всего: 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/
 
 Top
Uchkuma
Отправлено: 10 Июля, 2010 - 12:29:10
Post Id



Участник


Покинул форум
Сообщений всего: 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' - так верно.
 
 Top
Ch_chov
Отправлено: 10 Июля, 2010 - 13:08:27
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




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

А вообще, всегда лучше сначала поискать стандартную функцию, а не изобретать велосипед.
 
 Top
ALEN
Отправлено: 10 Июля, 2010 - 19:28:44
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Самый простой и удобный способ:
end(explode(".",$file)
 
 Top
JustUserR
Отправлено: 12 Июля, 2010 - 14:47:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




ALEN пишет:
Самый простой и удобный способ
Все-таки если рассматривать самый эффективный способ то это должно быть использование функций strrpos и substr - поскольку в нем не происходит поиска и извлечения лишних данных
'/\.(jpg|jpeg|png|gif)$/i' - так верноКстати в Perl такое регулярное выражение не будет работать должным образом поскольку оператор ИЛИ | там имеет больший приоритет над группой символов - и сами расширения в списка также надо было бы взять в круглые скобки


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB