2016-08-19 1 views
2

Мне нужно загрузить файл xlsx в php. Файл загружается, но когда я его открываю, он отображается как поврежденный файл. Я использовал Zend Frameworkxlsx Файл поврежден при загрузке в php

Контроллер:

$fullPath = '/opt/bitnami/lampstack-5.4.36-0/apps/projects/ProjectName/File_Name.xlsx'; 

if ($fd = fopen ($fullPath, "r")) 
{ 
    $fsize = filesize($fullPath); 
    $path_parts = pathinfo($fullPath); 
    $ext = strtolower($path_parts["extension"]);    

    header("Content-type: application/xlsx"); 
    header("Content-Disposition: attachment;filename=\"".$path_parts["basename"]."\""); 
    header("Content-length: $fsize"); 
    header("Cache-control: private"); 

    while(!feof($fd)) 
    { 
    $buffer = fread($fd, 2048); 
    echo $buffer;//To display the file content while downloaded. 
    } 
    } 
    fclose ($fd); 

Вид:

<?php echo $this->buffer; ?> 

Кроме XLSX/XLS файл правильно загрузки (любой файл PDF/изображение).

+0

Попробуйте разблокировать его из свойств .. – Saurabh

+0

Попробуйте увеличить размер буфера до 4096 –

+0

У меня есть полное право на файл (чтение/запись и выполнение). -rwxrwxrwx – Deepak

ответ

0

Я нашел проблему. Я вырезал и вставлял код в отдельный контроллер, который загружал только код. За это время он работает.

Он вызван из-за ошибки в функции init (отображение необходимых контроллеров и файлов моделей). Прокомментируйте каждый файл и проверьте и обнаружите ошибку в одном файле.

Надежда этот ответ поможет кому-то

Спасибо за ваш комментарий.

0

Существует множество проблем, которые могут возникнуть, и привести к этой ошибке.

Первое, что нужно сделать, это, вероятно, установить заголовок, как это:

header('Content-Length: ' . filesize('./uploads/resources/courses/' . $filename));

и

header('Content-Transfer-Encoding: binary'); 

Просто чтобы убедиться, что это не является ни заголовка, ни проблема filesire.

Часто с файлом xlsx у вас будет спецификация в начале файла. Существует очень простой способ проверить, является ли проблема проблемой при распаковке. Попробуйте разархивировать ваш xlsx-файл, и если у вас есть что-то вроде этого, то это спецификация, вызывающая проблему.

unzip -l your-file.xlsx 

Вы должны увидеть

warning file: 3 extra bytes at beginning or within zipfile. 

Вы также можете проверить с помощью шестигранного просмотра

head -c5 your-file.xlsx | xxd -g 1 

Если у вас есть выход, как это:

0000000: ef bb bf 50 4b 

Тогда это Проблема спецификации (обратите внимание на 3 первый байт efbbbf).

Снятие бомбы (интернет полон для этого решения) или кодирование файла для UTF-8 должно сделать трюк.

Надеюсь, что это помогло вам.

+0

Я добавил заголовок в свой файл и downloaaded, но все же он не работает. Я выполняю команду unzip, она не показывает никаких предупреждений. hex viewer показывает вывод как 0000000: 50 4b 03 04 14 PK ... – Deepak

+0

Мои догадки ошибочны :( – Unex