2014-09-18 1 views
0

У меня есть файл .dmg на моем сервере IIS. При загрузке непосредственно файл открывается нормально, но когда я служу файл с помощью PHP как такПри работе с файлами .dmg с 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

флеш перед чтением файла? вам также придется использовать ob_flash. – Dexa

ответ

1

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

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

UPDATE (основано на комментариях ниже):

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

+0

'HTTP/1.1 200 OK Cache-Control: нужно обязательно перепроверять, после проверки = 0, предварительно проверить = 0 Pragma: общественный Transfer-Encoding: фрагментированное Content-Type: применение/х-яблочный DiskImage Expires: 0 сервер: Microsoft-IIS/8.5 X-Powered-By: PHP/5.5.11 Content-Disposition: вложение; имя файла = AcrobatXPro.dmg Content-Transfer-Encoding: двоичный X-Powered-By: ASP.NET Дата: Чт, 18 сен 2014 15:50:06 GMT' это заголовок, который я получаю от загрузки через php – Matt

+0

. Также отправьте заголовки для прямой загрузки. Кроме того, пожалуйста, сделайте 'md5 checksum' (см. Md5_file в PHP) в обоих файлах (прямой и тот, который вы получаете от PHP), чтобы убедиться, что вы фактически получаете одинаковый контент в обоих случаях (например, нет никаких дополнительных данных, которые вводятся скриптом PHP на выходе). – dcro

+0

Для прямой загрузки 'Accept-Ranges:" bytes "Content-Length" 497415912 "Content-Type:" application/x-apple-diskimage "Etag:" 80603b1eb3fecb1: 0 "Сервер:" Microsoft-IIS/8.5 "И вы «Правильные дополнительные данные вводятся скриптом PHP. Контрольная сумма md5 не соответствует – Matt