у меня есть .dmg
файл на моем сервере IIS. При загрузке напрямую файл открывается просто замечательно, но когда я обслуживаю файл через PHP примерно так
$mime_types['dmg'] ='application/x-apple-diskimage';
$filename = getfile($_GET['dc']);
$fakename = fakefilename($_GET['dc']);
$extension = fileexten($filename);
if(($filename!= false)&&($fakename!=false&& @fopen($filename,'r')==true)){
$mime = contenttype($extension);
set_time_limit(0);
header('Pragma: public');
header('Expires: 0');
header("Content-Type:".$mime);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Disposition: attachment;filename='.$fakename.'.'.$extension);
header("Content-Transfer-Encoding: binary");
if (ob_get_length() > 0) {
ob_end_clean();
}
flush();
@readfile($filename);
}
Я получаю сообщение об ошибке, в котором говорится, что образ диска не распознан
Я также попытался установить .dmg application / octet-stream, но я все еще сталкиваюсь с той же проблемой.
Я предполагаю, что это либо случай, когда тип контента установлен неправильно, либо длина контента установлена неверно. Проверьте, если $mime = contenttype($extension);
возвращает правильный тип контента.
Было бы полезно отладить это с помощью прокси-инструмента веб-отладки (такого как Fiddler или Charles) и опубликовать весь заголовок ответа при непосредственном доступе к файлу. & когда вы получаете к нему доступ через скрипт PHP.
ОБНОВЛЕНИЕ (на основе комментариев ниже):
Сценарий имел дополнительные разрывы строк в конце файла, которые отправлялись в ответе.
Других решений пока нет …