Итак, я создаю веб-сайт, который позволит пользователям загружать файлы csv, которые должны быть отсканированы в базу данных mySQL. Потому что я не хочу рисковать злыми людьми, загружающими странные файлы, которые могут испортиться с моей базой данных. Я предполагаю, что это хорошая идея, чтобы проверить тип mime файла. Из других потоков я понял, что единственный способ правильно это сделать – использовать finfo (). Но я не работаю. Следующий код в моем файле uploadfile.php просто распечатывает временное имя файла, за которым следует «привет».
$filename = $_FILES["file"]["temp_name"]; echo $filename; if (function_exists('finfo_open')&&$mode==0) { $finfo = finfo_open(FILEINFO_MIME_TYPE); echo finfo_file($finfo,$filename); finfo_close($finfo); echo "hello"; }
Поэтому я знаю, что файл загружен правильно, я знаю, что функция существует, я знаю, что в предложении if нет ошибки. Так почему же это не сработает? Я тестирую это через MAMP, и думаю, что, возможно, там есть ошибка? Хотя он имеет версию PHP 5.4.4.
Я также пробовал разные версии, например:
$mimetype = finfo_file($finfo,$filename); echo $mimetype;
Но ничего не работает. Он никогда не печатает какой-либо тип mime: (Что я могу сделать, чтобы исправить это?
finfo_file может и будет возвращать пустую строку и FALSE, если тип не найден.
Проблема с типом mime здесь, вы также не можете доверять им.
Я сделал это раньше и проанализировал файлы с помощью fgetcsv. Любая ошибка там, и я отбросил файл. Таким образом, вы можете быть уверены, что это действительно csv.
Когда вы вставляете в свою базу данных, убедитесь, что вы выполняете правильное экранирование или используете подготовленные операторы.