У меня есть сайт PHP, на котором зарегистрированные пользователи могут загружать аватар. Одним из ограничений является то, что люди могут загружать только файл .jpg или .jpeg только с буквенно-цифровыми символами, все остальное отклоняется. Это делается для того, чтобы я получал только загрузки, такие как «avatar.jpg», а не «evilcode.php» или «secretcode.php.jpg». Я также планирую другие проверки, но сейчас я не могу сделать этот первый шаг для работы.Использование regex в PHP для фильтрации допустимых имен файлов
Я использую это регулярное выражение:
[a-zA-Z0-9]{1,150}+\.+(jpe?g)
Это код, который я сейчас использую. Функция вызывается из другого php-файла с параметром $ _FILES ['avatar'].
public function updateAvatar($avatar)
{
$regex = '^[a-zA-Z0-9]{1,100}+\.+(jpe?g)$';
$name = $avatar['name'];
$result = preg_match_all($regex, $name);
if($result === 1)
{
return true;
} else
{
return false;
}
}
Это всегда возвращает ложь, при загрузке либо "avatar.jpg", "code.php", или "duck.gif". Согласно руководству PHP, этот код должен быть правильным. Метод возвращает либо целое число, либо логическое значение, и предупреждает, что вы должны использовать ===, not == для сравнения результата. Кто-нибудь знает, что я сделал неправильно?
Следует проверить тип MIME загруженного файла. – Marty
Без фактической проверки этой идеи .. Я думаю, что результат будет равен 2, а не 1, весь шаблон = 1 + группа = 2 – Dale