Здравствуйте! Возникла след. проблема при upload excel файла, файл возвращается битый, а точнее в начале файла добавляется лишний байт 0A. Из-за этого excel орет, что файл поврежден. Примерный код приведен ниже: header("Expires: 0"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-type: application/x-excel"); header('Content-Disposition: inline; filename="'.$fileName.'"'); $fileTmp = 'd:/'.$fileName; $handle = fopen($fileTmp, "rb"); $contents = fread($handle, filesize($fileTmp)); fclose($handle); //header("Content-Length: ".filesize($fileTmp)); echo $contents; Я так думаю, что тут апач чего то начинает подменять, но это только мои предположения
попробуй функцию readfile($fileTmp) или file_get_contents($fileTmp) как пользоваться можно почитать в мануале
Проблема не в чтении файла, а в самой передаче данных браузеру. Дело в том, что это только пример. На самом деле, файл мне приходит потоком с другого сервера и я его перенаправляю уже в браузер. До этого я думал, что ко мне приходил битый файл уже в потоке, но когда я его сохранил сразу на диск, то файл был правильным и открывался без проблем. Кстати, почему то картинки и пдф файлы передаются нормально, а вот excel подвел. Вот я и думаю, то ли в хеадере нужно что то прописать еще, или нужно апач ковырять.
я делаю так: PHP: <?php function get_content_type($type = ''){ $types = array( 'css' => "text/css", 'htm' => "text/html", 'html'=> "text/html", 'js' => "text/js", 'xml' => "text/xml" ); if(isset($types[$type])){ return $types[$type]; } else { return "application/octet-stream"; } } $path = 'path_to_your_file'; $file = pathinfo($path); // dirname, basename, filename, extension $file['path'] = $path; $content_type = get_content_type($file['extension']); header("Content-Type: {$content_type}"); readfile($file['path']); exit(); ?>
у меня так: PHP: <?php $fileName = '1.xls'; $dir='c:\\'; header('Content-Disposition: inline; filename="'.$fileName.'"'); header("Content-type: application/x-excel"); include($dir.$fileName); ?>