Проблема с загрузкой файла .xlsx в PHP

В моем PHP-скрипте я загружаю файл во временное место на сервере для дальнейшего использования, скрипт поддерживает (.txt, .csv, .xls, .xlsx) эти форматы.

Скрипт корректно работает для всех расширений, кроме .xlsx. Данные файла .xlsx загружаются на сервер вместе с данными мусора.

$ext=fileExtension(basename($_FILES['bulkfile']['name']));
$uniqueidread=uniqid(); 
$dbfileread=$docroot.'/filedepot/'.$uniqueidread.".".$ext;      
if(!move_uploaded_file($_FILES['bulkfile']['tmp_name'],$dbfileread)){
    $errmsg['form']="Sorry, unable to upload file";
}

Пример загруженных данных файла .xlsx:

PK,khEü‘˖Éódã¤va0ehЛòdÂ<M1üõ€âÌS*
áPm@G“ÿ÷vuÝ•ôìÊ÷¬\ˆÀONÜI45¡!Ñ0_1N“M‰/Ãä7†É—`

В чем тут проблема?


person Ekky    schedule 30.05.2013    source источник
comment
Я считаю, что .xlsx Excel сохраняется в двоичном формате, а не в текстовом формате. .xls можно сохранять как в виде обычного текста, так и в двоичном формате. PK - это, если я помню, PKZip (WinZip), упакованный файл.   -  person Funk Forty Niner    schedule 30.05.2013
comment
Как определить, что данные - мусор? Вы открываете в Excel, проверяете хеши? Просто сами данные не должны быть мусором.   -  person Bart Friederichs    schedule 30.05.2013
comment
@Fred, так как я могу сохранить этот файл xlsx в текстовом формате, чтобы его можно было читать   -  person Ekky    schedule 30.05.2013
comment
вы правы @BartFriederichs, я проверил данные на стороне клиента, это не мусор. но я думаю, что на сервере он сохраняется в каком-то другом формате, поэтому скрипт не читает его должным образом   -  person Ekky    schedule 30.05.2013
comment
Вы не хотите «читать» такие двоичные (сжатые) данные. Это не имеет смысла, это все равно что читать код файла изображения в формате jpeg. Попробуйте загрузить файл и открыть его с помощью инструмента для архивации zip. Если это сработает, вы найдете там отдельные файлы, которые сможете прочитать.   -  person arkascha    schedule 30.05.2013
comment
И не пытайтесь увидеть волшебную логику в поведении http-серверов. Этот сервер (и ваши скрипты php) ничего не знает о ваших форматах файлов, о том, что вы называете расширениями. Им все равно. И уж точно они не станут волшебным образом конвертировать содержимое одного формата файла в другой.   -  person arkascha    schedule 30.05.2013
comment
@Ekansh, ты тогда читал? Если вы предоставите правильные заголовки mime, все должно работать нормально.   -  person Bart Friederichs    schedule 30.05.2013
comment
@Ekansh Вы не можете, не напрямую из Excel. Вам нужно будет открыть файл в самом Excel, чтобы просмотреть его. Знаю, давно работаю с Excel.   -  person Funk Forty Niner    schedule 30.05.2013
comment
Я использую SpreadsheetReader для чтения этого загруженного файла, но если файл находится в двоичном формате, это создает проблему   -  person Ekky    schedule 30.05.2013
comment
Как заявил Барт, использование правильного mime-типа поможет хотя бы сохранить файл, чтобы его можно было использовать.   -  person Funk Forty Niner    schedule 30.05.2013
comment
Файлы xls и xlsx являются двоичными, xls - это файл BIFF, встроенный в поток OLE, xlsx - это набор файлов xml в zip-архиве - оба нуждаются в соответствующих инструментах для их просмотра, и если вы хотите открыть эфир в PHP, вам нужно правильная библиотека, которая может читать эти форматы ... но если вы просто загружаете, в чем проблема?   -  person Mark Baker    schedule 30.05.2013
comment
@MarkBaker Да, я исправлюсь. Ранее ошибся насчет сохранения .xls в обоих форматах. Виноват.   -  person Funk Forty Niner    schedule 30.05.2013
comment
@Ekansh Попробуйте использовать application/vnd.openxmlformats-officedocument.spreadsheetml.sheet при сохранении загруженных .xlsx файлов, посмотрите, что это даст.   -  person Funk Forty Niner    schedule 30.05.2013
comment
Спасибо всем, я попробую все возможные решения, которые вы мне предложили ... надеюсь, что это сработает, иначе я поймаю вас позже, чтобы найти решение. и простите меня за плохой английский, так как это не мой родной язык   -  person Ekky    schedule 30.05.2013
comment
@Ekansh Посмотрите на них, может помочь phpkode.com/scripts/item/simple -xlsx stackoverflow.com/ questions / 2528213 /   -  person Funk Forty Niner    schedule 30.05.2013