При использовании компьютерных файлов загружаются в обычном режиме. Проблема начинается с Android-браузеров.Невозможно скачать файлы с php в андроид-браузерах
Когда мы загружаем файл из браузера android по умолчанию, файл загружается, но он составляет 0,00 байт, поэтому технически отсутствует там (поврежденный файл).
При загрузке файла из любого стороннего приложения, например, или в опера, он дает ошибку, что «файл не может быть загружен». а не ошибка заголовка. И файлы могут быть загружены через браузер UC, Chrome и Firefox. Но все же дает ошибку в браузере по умолчанию.
Вот код, я использую:
<?php
require 'php/db.php';
if(isset($_POST['file_id'])&&!empty($_POST['file_id'])){
download_file($_POST['file_id']);
}
function download_file($id){
global $con;
$id = mysqli_real_escape_string($con,htmlentities($id));
$file="SELECT file_name,file_title,file_size,down FROM files WHERE file_id= $id";
$result = mysqli_query($con,$file);
$row = mysqli_fetch_assoc($result);
$name = $row['file_name'];
$title = $row['file_title'];
$size = $row['file_size'];
$ext = strtoupper(ext($name)); // Function defined bellow
$down = $row['down'];
$newname = $title.'.'.$ext;
$olddir = "files/".$name;
$down++;
if(is_file($olddir)) {
$update_down = "UPDATE files SET down = $down WHERE file_id = '$id'";
$update_down_result = mysqli_query($con,$update_down);
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($olddir)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$newname.'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$size); // provide file size
header('Connection: close');
readfile($olddir);
exit();
}else header("Location: index.php?msg=Sorry!+File+could+not+be+downloaded");
}
function ext($name){
$rut = strrev($name);
$erut = explode('.', $rut);
return strrev($erut[0]);
}
Дадим файл идентификатор этой функции, и он загружает файл на ПК.
Может ли кто-нибудь сказать мне, как удалить эту ошибку? Так что пользователи могут загружать файлы со своих телефонов Android.
http://stackoverflow.com/questions/4674737/avoiding-content-type-issues-when-downloading-a-file-via-browser-on-android проверить этот вопрос, он предлагает положить расширение в столицах. – STLMikey
напишите расширение имени файла Content-Disposition в UPPERCASE . Для этого я изменяю строку $ ext = strtoupper (ext ($ name)); и теперь, если мы загружаем расширение, оно поставляется в верхнем регистре, но все еще не может быть загружено на мобильный. Если вы хотите попробовать скачать файл с сайта www.skyshare.in – Paras
Пожалуйста, разместите ссылку для скачивания здесь. – greenapps