Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите разобраться с регуляркой


Автор: mark2011 8.11.2011, 16:52
Всем доброго времени суток!

Вопрос простой для профи, но мне надо знать точный ответ. Настраиваю Uploadify, там есть такой кусок кода:

Код

$ext = preg_replace('/(?:.*)(\.{1}[a-zA-Z]{3,4})$/','$1', $_FILES['Filedata']['name']);


Руки чешутся удалить, но не понимаю, что он делает.... подскажите кто-нибудь пожалуйста.

Автор: ksnk 8.11.2011, 17:06
строчка выедает расширение файла.
Видимо, по мнению Uploadify, последние 3 или 4 знака латинского алфавита после точки  и будут расширением файла. Возможно, в этом есть своя сермяжная правда, однако многотомные архивы r01, r02... и двухбуквенные расширения (js) будут признаны некорректными.

Автор: $дмитрий 8.11.2011, 18:24
Какой-то шаблон избыточный, проще /.*(\.[a-z]{3,4})$/i

Автор: zammar 8.11.2011, 20:35
А это еще правильнее:

$pos = strrpos($_FILES['Filedata']['name'], '.');
$ext = substr($_FILES['Filedata']['name'], $pos + 1);

Автор: mark2011 8.11.2011, 22:53
Короче, я так понял, эту регулярку можно безболезненно убрать и вообще код и всю логику php поменять на свою (а она у меня непростая )))))

Автор: Lols 8.11.2011, 23:16
Так что удаляйте, а, вернее, исправляйте, это вполне распространенная вещь (сама много раз сталкивалась).

Автор: message 21.12.2011, 00:00
Цитата(zammar @ 8.11.2011,  20:35)
А это еще правильнее:

$pos = strrpos($_FILES['Filedata']['name'], '.');
$ext = substr($_FILES['Filedata']['name'], $pos + 1);

A так слабо?
Код

$extension = pathinfo('image.png', PATHINFO_EXTENSION);

Автор: Shogun 22.12.2011, 13:26
Цитата(message @  21.12.2011,  00:00 Найти цитируемый пост)
A так слабо?
код PHP
1: $extension = pathinfo('image.png', PATHINFO_EXTENSION);

+1 - еще тут не помешает strtolower

Но как известно ограничившись проверкой лишь расщирения, может плохо кончится...

Нужно еще и mime тип файла проверить.
Но и тут есть одно но, Uploadify да и флэш в ообщем при рагрузке файла меняет его mime на "application/octet-stream"!

Нужно уже в пхп вернуть этому файлу его миме тип. Например так: 
Код

$file_info = finfo_open(FILEINFO_MIME_TYPE);
$file->type = finfo_file($file_info, $file->tmp_name);
finfo_close($file_info);


или с помошью mime_content_type если оно есть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)