Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   Пременная со значением = разшерение файла. (http://www.flasher.ru/forum/showthread.php?t=50377)

rojok-online 21.10.2003 00:48

Пременная со значением = разшерение файла.
 
Народ, подскажите, каким образом можно получить разшерение из названия файла.
Пробовал так
$lines="qqq.jpg";
$lines = ereg_replace (".", ":::", $lines );
list($id1,$pass) = split(":::",$lines);
echo" $id1";

Не хочет точку рассмотривать, как разделитель.
Может все таки можно? Или может есть команда отдающая значение расшерения?

Crazy 21.10.2003 00:53

Правила:

1. Никогда не использовать ereg_*.
2. Если хочется использовать регулярные выражения, то выучить, что в них означают разные спецсимволы -- включая точку.
3. Распечатать список строковых функций и повесить в сортире. Пусть висит, пока не выучишь.

Самурай 21.10.2003 09:26

PHP код:

$partoffilename=explode("."$filename); 


mishinaelle 21.10.2003 13:04

да и $partoffilename[count($partoffilename)-1] как раз будет расширением

Crazy 21.10.2003 15:48

Контрольный пример: $filename='foobar'; :D

mishinaelle 21.10.2003 19:56

на кривые имена - кривой ответ :D :D

mishinaelle 21.10.2003 20:01

PHP код:

if(strrpos($filename".")!=false){
  
$partoffilename=explode("."$filename);
  echo(
"расширение вашего долбаного файла:".$partoffilename[count($partoffilename)-1]);
}else{
  echo(
"Кривое имя!!!");



Crazy 21.10.2003 22:30

Цитата:

Оригинал написал(а) mishinaelle
на кривые имена - кривой ответ :D :D
Это не кривые имена (файл не обязан иметь расширение), а кривые руки.

Crazy 21.10.2003 22:31

Цитата:

Оригинал написал(а) mishinaelle
PHP код:

if(strrpos($filename".")!=false){ 


Hint: делать explode ПОСЛЕ того, как отработал strrpos, есть сугубо нездоровое решение. Введу бессмысленной неэффективности.

mishinaelle 22.10.2003 13:17

да, согласна.
надо пользовать substr

juggy 22.10.2003 14:56

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

mime_content_type() 

.тогда и узнавать расширение не надо.

RTFM
RTFM (rus)

Crazy 22.10.2003 15:00

Цитата:

Оригинал написал(а) juggy
[b]для того чтобы определить что за зверь перед нами можно использовать
PHP код:

mime_content_type() 


Какой тип у файла foobar.r05 ? :)

juggy 22.10.2003 15:01

тот который выдаёт хидер.

Crazy 22.10.2003 15:07

Цитата:

Оригинал написал(а) juggy
тот который выдаёт хидер.
Какой хидер? Кому выдает?

juggy 22.10.2003 15:13

Если ты в папку положишь файл 12345 без разширения, а на самом деле он будет просто 12345.gif но обрезанный, эта функция определит какой медиа-тип послать браузеру.

Crazy 22.10.2003 15:28

1. Не для форматов файлов есть mime-type.
2. Если кто-то определяет расширение имени файла, то это вовсе не означает, что он будет послан в браузер.
3. Если у нас в руках есть имя файла, то это вовсе не означает, что доступен сам файл.

Nirva 22.10.2003 15:50

jpg/jpeg, png/pgn, gif/gif89 ...

Crazy 22.10.2003 15:54

Цитата:

Оригинал написал(а) Nirva
jpg/jpeg, png/pgn, gif/gif89 ...
Это ты о чем?

Alex Wanderer 23.10.2003 17:41

Цитата:

Оригинал написал(а) Crazy
Это ты о чем?
Мэй би, о картинках.
Кстати о картинках, их тип хорошо gd2 определяет, вне зависимости от приклеенного расширения.

Nirva 23.10.2003 23:01

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

Wave 23.10.2003 23:52

PHP код:

function fileExt($file){
    return ((
$pos strrpos($file".")) !== false) ? substr($file$pos-strlen($file)+1) : $pos;


Не без изъянов, но для внутреннего использования подойдет вполне.

Nirva 24.10.2003 05:50

strrpos($file, ".")) !== false

!strrpos($file, "."))
все же будет правильнее. например, для .htaccess будет возвращено значение ноль. то есть файл, у которого нет имени не будет иметь расширения. имхо, ну и если фолс то возвращать можно просто 0. типа быстрее ;)

Wave 24.10.2003 06:37

Для файла ".htaccess" функция должна возвратить его расширение "htaccess".
Это правильно.

Nirva 24.10.2003 08:49

Вейв, ты че?
ты ж сам ставишь !== false
то есть не эдентично false. а false будет возвращено тока, если точки в полном имени файла нет. если с точки начинается, то будет возвращен 0, величина равная, но нулю не идентичная по причина несоответвия типов. тогда надо ставить !=

Nirva 24.10.2003 09:10

пока готовил кофе типа идея пришла
поставить !=
тогда при имени типа name.ext
возвращается ext
при типа .ext
возвращается ext
а вот если name, то есть расширение отсутсвует возвращать NULL.
и еще щас...
допустим файл name.ext
$pos = strrpos($file, ".")
будет 4
$pos-strlen($file)+1
будет 4-9 = -5
если не ошибаюсь.. не ошибаюсь, возвращено будет
e.ext
поскольку -1 будет t как последний символ. то есть плюс один нафик.
тогда при каком нить d.name.
$pos = strrpos($file, ".")
возвращено будет
6
$pos-strlen($file)
6-6 получаем 0.

и полное различие результатов есть!
итак, вывод:
ext - расширение вот вам
NULL - расширение и точка отсутсвуют или имени файла не существует
0 - или расширение "0" или после точки ниче нет

Wave 24.10.2003 09:29

Цитата:

Вейв, ты че?
ты ж сам ставишь !== false
то есть не эдентично false. а false будет возвращено тока, если точки в полном имени файла нет. если с точки начинается, то будет возвращен 0, величина равная, но нулю не идентичная по причина несоответвия типов. тогда надо ставить !=
Да, я осознанно ставлю !== false.
При таком раскладе, если точки в имени файла нет, будет возвращено false, если с точки начинается, будет возвращено все, что после точки.


Цитата:

пока готовил кофе типа идея пришла
поставить !=
тогда при имени типа name.ext
возвращается ext
при типа .ext
возвращается ext
а вот если name, то есть расширение отсутсвует возвращать NULL.
функция, которую я привел в качестве примера возвращает расширение в первых двух случаях и false в третьем.

Цитата:

и еще щас...
допустим файл name.ext
$pos = strrpos($file, ".")
будет 4
$pos-strlen($file)+1
будет 4-9 = -5
если не ошибаюсь.. не ошибаюсь, возвращено будет
e.ext
Ошибаешься.

$pos-strlen($file)+1 = 4-8+1 = -3

Возвращено будет 'ext'.

Цитата:

поскольку -1 будет t как последний символ. то есть плюс один нафик.
тогда при каком нить d.name.
$pos = strrpos($file, ".")
возвращено будет
6
$pos-strlen($file)
6-6 получаем 0.
Опять ты в трех соснах заблудился.

Итак, что мы имеем:

Я - написал маленькую, изящную, корректно выполняющуюся функцию.
Ты - путаешься в элементарных математических рассчетах.

Думать надо, думать несколько раз, прежде чем критиковать что-либо.

Nirva 24.10.2003 11:24

Я понимаю, что не спал сутки и все же. думать не могу, решил пробовать:
при "name."
функция возвращает name.
в остальном верно, я гоню.

Pietrovich 26.10.2003 14:21

есть вопрос.
возможно он туп до безобразия, но я тек и не встретил упоминания про
pathinfo(); [Returns information about a file path (PHP 4 >= 4.0.3) ]

или тут специально тренируются обходиться без core feautures?

:D

mishinaelle 27.10.2003 12:16

2 Pietrovich: прикольно, но эта функция прошла мимо меня :)
спасибо за то, что раскрыл глаза.

MiDoS 29.10.2003 19:21

Развели дискуссию... Меньше слов, больше дела!

$ext = @eregi_replace("(.*)[\.]([a-z0-9]{1,})$", "\2", "$filename");

Если расширения нет, то вернет нулевую строку.
Еще полезно добавить обработку на недопустимые символы в имени файла...

Вот и все! Учите PHP и особенно регулярные выражения!

Wave 29.10.2003 19:27

фу, какие вы немодные!

Pietrovich 29.10.2003 22:06

2MiDoS

..."\\2 "...


моя тестовая машинка (P166, 64M) прогоняла 10000 определений расширения:
а) через pathinfo() - 0.66134 сек.
б) через eregi_replace() - 13.88424 сек.
в) через preg_replace() [i] - 2.31142 сек.

выводы: если регехпы, то перловские, и без ошибок. хотя зачем изобретать велосипед когда есть мотоцикл?!
вот такие пироги...

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

Nirva 29.10.2003 23:10

Цитата:

Оригинал написал(а) MiDoS
Развели дискуссию... Меньше слов, больше дела!

Вот и все! Учите PHP и особенно регулярные выражения!

какой ты чувствительный мальчик, Томми. (с)гоблин
рэгэксп написал и прям трудяга! молодец! орден выдать?
да к тому же с неточностями, точно говорю. к сожалению, пробовать лень. возможно, опять гоню.

MiDoS 30.10.2003 17:29

\\2 - мой косяк, наверно, по бекспейсу опять попал... бывает. В остальном все работало, погнал разнообразные тестовые примеры (генератором случайных строк). Время не засекал, да тем более на быстром проце трудно судить о скорости...

Perl'овский синтаксис сложнее, но работает на порядок быстрее, не спорю... А тем более если есть "родная" PHP-функция, тут и тестить не надо...

Я вообще к тому веду, что люди боятся регулярных выражений, как черт ладана. Или ленятся. Лучше день потерять, зато потом за 5 минут долететь. А в основном предпочитают дождаться ответа с форума, чем прочитать мануаль.

MiDoS 30.10.2003 17:35

\\2 - мой косяк, наверно, по бекспейсу опять попал... бывает. В остальном все работало, погнал разнообразные тестовые примеры (генератором случайных строк). Время не засекал, да тем более на быстром проце трудно судить о скорости...

Perl'овский синтаксис сложнее, но работает на порядок быстрее, не спорю... А тем более если есть "родная" PHP-функция, тут и тестить не надо...

Я вообще к тому веду, что люди боятся регулярных выражений, как черт ладана. Или ленятся. Лучше день потерять, зато потом за 5 минут долететь. А в основном предпочитают дождаться ответа с форума, чем прочитать мануаль.


Часовой пояс GMT +4, время: 09:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.