Форум 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)

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 и особенно регулярные выражения!


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

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