У меня возникли проблемы с загрузкой файла из хэшированного пути к файлу.Php download from hashed pathfile
Я использую базу данных MySQL, где храню различные данные из HTML-формы. Можно загрузить до трех разных файлов. Они перемещаются в папку uploads на сервере. Я использую MD5 для предотвращения дублирования загрузки файлов.
Все данные в базе данных вызываются из другого сценария. В зависимости от того, сколько файлов загружено, отображается количество загружаемых ссылок. Im, используя fileinfo и заголовки, чтобы определить тип mimetype и загрузить файл. Но все, что я получаю при загрузке, - это некоторый zip-файл со случайными папками и документами или файл без расширения, который, предоставляя правильное расширение, открывается с предупреждениями и в конечном итоге показывает правильный файл.
Вот моя скачать код:
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
print("</br>"); echo finfo_file($finfo, $_GET["fName"]);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= ". $_GET["fName"]);
header("Content-Type: " .$finfo);
finfo_close($finfo);
header("Content-Transfer-Encoding: binary");
// Read the file from disk
readfile($_GET["fName"]);
$_GET["fName"]
переменная передается по ссылке, которая содержит указанный путь к файлу (например: ./uploads/hashcode
). Как я могу сделать это, чтобы я мог правильно загрузить документ? Как и при загрузке документа целиком, а не какой-либо ZIP-файл или файл без расширения.
Я уже несколько дней сражаюсь с этой проблемой (ищется в Интернете, чтобы найти что-то пригодное для использования), и им становится довольно отчаянно.
Дополнительное примечание. В большинстве случаев файл, который загружает, является правильным файлом с моего сервера. Он имеет то же имя, что и хэш-файлы в папке uploads. Но он не имеет никакого расширения.
Вы устанавливаете имя загруженного файла здесь заголовка (. "Content-Disposition: привязанностью, имя файла =" $ _GET [ "имя_файла"]); Возможно, вы могли бы использовать базовое имя или какую-то другую функцию, чтобы правильно присвоить свой файл. – Jompper
Также это не очень безопасно. Если кто-то назвал script.php? FName = script.php или что-то еще, они смогут загружать ваши файлы конфигураций и все, что было сохранено на вашем сервере, – Jompper
Я знаю, что это не один из самых безопасных способов. Я просто хочу, чтобы эта проблема с загрузкой была выполнена до того, как я перейду в режим безопасности. – Amacoder