![]() |
Пременная со значением = разшерение файла.
Народ, подскажите, каким образом можно получить разшерение из названия файла.
Пробовал так $lines="qqq.jpg"; $lines = ereg_replace (".", ":::", $lines ); list($id1,$pass) = split(":::",$lines); echo" $id1"; Не хочет точку рассмотривать, как разделитель. Может все таки можно? Или может есть команда отдающая значение расшерения? |
Правила:
1. Никогда не использовать ereg_*. 2. Если хочется использовать регулярные выражения, то выучить, что в них означают разные спецсимволы -- включая точку. 3. Распечатать список строковых функций и повесить в сортире. Пусть висит, пока не выучишь. |
PHP код:
|
да и $partoffilename[count($partoffilename)-1] как раз будет расширением
|
Контрольный пример: $filename='foobar'; :D
|
на кривые имена - кривой ответ :D :D
|
PHP код:
|
Цитата:
|
Цитата:
|
да, согласна.
надо пользовать substr |
для того чтобы определить что за зверь перед нами можно использовать
PHP код:
RTFM RTFM (rus) |
Цитата:
|
тот который выдаёт хидер.
|
Цитата:
|
Если ты в папку положишь файл 12345 без разширения, а на самом деле он будет просто 12345.gif но обрезанный, эта функция определит какой медиа-тип послать браузеру.
|
1. Не для форматов файлов есть mime-type.
2. Если кто-то определяет расширение имени файла, то это вовсе не означает, что он будет послан в браузер. 3. Если у нас в руках есть имя файла, то это вовсе не означает, что доступен сам файл. |
jpg/jpeg, png/pgn, gif/gif89 ...
|
Цитата:
|
Цитата:
Кстати о картинках, их тип хорошо gd2 определяет, вне зависимости от приклеенного расширения. |
это я про использование хедеров для определения расширения.
не, ну имя файла и хорошо. оттуда все, что после последней точки. ну и мол имя тоже должно быть. |
PHP код:
|
strrpos($file, ".")) !== false
!strrpos($file, ".")) все же будет правильнее. например, для .htaccess будет возвращено значение ноль. то есть файл, у которого нет имени не будет иметь расширения. имхо, ну и если фолс то возвращать можно просто 0. типа быстрее ;) |
Для файла ".htaccess" функция должна возвратить его расширение "htaccess".
Это правильно. |
Вейв, ты че?
ты ж сам ставишь !== false то есть не эдентично false. а false будет возвращено тока, если точки в полном имени файла нет. если с точки начинается, то будет возвращен 0, величина равная, но нулю не идентичная по причина несоответвия типов. тогда надо ставить != |
пока готовил кофе типа идея пришла
поставить != тогда при имени типа 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" или после точки ниче нет |
Цитата:
При таком раскладе, если точки в имени файла нет, будет возвращено false, если с точки начинается, будет возвращено все, что после точки. Цитата:
Цитата:
$pos-strlen($file)+1 = 4-8+1 = -3 Возвращено будет 'ext'. Цитата:
Итак, что мы имеем: Я - написал маленькую, изящную, корректно выполняющуюся функцию. Ты - путаешься в элементарных математических рассчетах. Думать надо, думать несколько раз, прежде чем критиковать что-либо. |
Я понимаю, что не спал сутки и все же. думать не могу, решил пробовать:
при "name." функция возвращает name. в остальном верно, я гоню. |
есть вопрос.
возможно он туп до безобразия, но я тек и не встретил упоминания про pathinfo(); [Returns information about a file path (PHP 4 >= 4.0.3) ] или тут специально тренируются обходиться без core feautures? :D |
2 Pietrovich: прикольно, но эта функция прошла мимо меня :)
спасибо за то, что раскрыл глаза. |
Развели дискуссию... Меньше слов, больше дела!
$ext = @eregi_replace("(.*)[\.]([a-z0-9]{1,})$", "\2", "$filename"); Если расширения нет, то вернет нулевую строку. Еще полезно добавить обработку на недопустимые символы в имени файла... Вот и все! Учите PHP и особенно регулярные выражения! |
фу, какие вы немодные!
|
2MiDoS
..."\\2 "... моя тестовая машинка (P166, 64M) прогоняла 10000 определений расширения: а) через pathinfo() - 0.66134 сек. б) через eregi_replace() - 13.88424 сек. в) через preg_replace() [i] - 2.31142 сек. выводы: если регехпы, то перловские, и без ошибок. хотя зачем изобретать велосипед когда есть мотоцикл?! вот такие пироги... а вообще я обчно если чего-то хочу, но не знаю как, лезу в хелп. иногда 10 минут рысканий в хелпе позволяют съекономить время на написании велосипедов. (не данный пример, но довольно часто случается... обычно если хочется чего-то, что в принципе могли хотеть многие, наверняка окажется что это уже есть в стандартном наборе :) |
Цитата:
рэгэксп написал и прям трудяга! молодец! орден выдать? да к тому же с неточностями, точно говорю. к сожалению, пробовать лень. возможно, опять гоню. |
\\2 - мой косяк, наверно, по бекспейсу опять попал... бывает. В остальном все работало, погнал разнообразные тестовые примеры (генератором случайных строк). Время не засекал, да тем более на быстром проце трудно судить о скорости...
Perl'овский синтаксис сложнее, но работает на порядок быстрее, не спорю... А тем более если есть "родная" PHP-функция, тут и тестить не надо... Я вообще к тому веду, что люди боятся регулярных выражений, как черт ладана. Или ленятся. Лучше день потерять, зато потом за 5 минут долететь. А в основном предпочитают дождаться ответа с форума, чем прочитать мануаль. |
\\2 - мой косяк, наверно, по бекспейсу опять попал... бывает. В остальном все работало, погнал разнообразные тестовые примеры (генератором случайных строк). Время не засекал, да тем более на быстром проце трудно судить о скорости...
Perl'овский синтаксис сложнее, но работает на порядок быстрее, не спорю... А тем более если есть "родная" PHP-функция, тут и тестить не надо... Я вообще к тому веду, что люди боятся регулярных выражений, как черт ладана. Или ленятся. Лучше день потерять, зато потом за 5 минут долететь. А в основном предпочитают дождаться ответа с форума, чем прочитать мануаль. |
| Часовой пояс GMT +4, время: 09:29. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.