iis — при обслуживании файлов .dmg из PHP пользователь получает «образ диска не распознан»

у меня есть .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, но я все еще сталкиваюсь с той же проблемой.

0

Решение

Я предполагаю, что это либо случай, когда тип контента установлен неправильно, либо длина контента установлена ​​неверно. Проверьте, если $mime = contenttype($extension); возвращает правильный тип контента.

Было бы полезно отладить это с помощью прокси-инструмента веб-отладки (такого как Fiddler или Charles) и опубликовать весь заголовок ответа при непосредственном доступе к файлу. & когда вы получаете к нему доступ через скрипт PHP.

ОБНОВЛЕНИЕ (на основе комментариев ниже):

Сценарий имел дополнительные разрывы строк в конце файла, которые отправлялись в ответе.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]