Intereting Posts
Symfony вызывает сборщик мусора PHP на Ubuntu 14.04, даже если session.gc_probability установлен в 0 PHP: анализ разделенных запятыми значений между квадратными скобками в многомерном массиве Двунаправленное шифрование в PHP Автоматический выход из системы Zend после бездействия Как я могу объединить несколько отдельных массивов, которые не включены в массив? Как добавить прослушиватель событий в динамически добавленное поле с помощью Symfony Forms Не удалось подключиться к хосту SMTP. Функция php mail () на localhost Yii – проверка на стороне пользователя для элементов формы, загруженных ajax Зачем вызывать mb_convert_encoding для дезинфекции текста? Как проверить, имеет ли строка хотя бы одну букву, номер и специальный символ в php «Неизвестный модификатор« g »в …» при использовании preg_match в PHP? В классе PHP5, когда вызывает вызов частного конструктора? Проверьте, правильно ли сформирован удаленный файл XML с PHP Фильтрация списка WordPress oEmbed

Код предназначен для загрузки файла excel (.xls)

Проблема: после загрузки файл не содержит данных. т.е. он становится пустым.

Поэтому, пожалуйста, помогите мне в этом.

<?php session_start(); include_once 'oesdb.php'; $id=$_REQUEST['id']; if(isset($_REQUEST['id'])) { $sql=executeQuery("SELECT * FROM file where id=$id"); $rows = mysql_fetch_array($sql); $file =$rows['file']; header('Content-Description: File Transfer'); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile('uploads/'.$file); exit; } ?> 

Почему бы не создать файл HTACCESS в папке uploads, а затем указать

  Allow From 127.0.0.1 Deny From All 

Затем просто создайте URL-адрес, используйте новую функцию загрузки HTML5, сделайте что-то вроде этого:

  <a href="uploads/filenamehere.txt" download="filenamehere.txt">click to download</a> 

Это экономит время, пытаясь использовать PHP для создания сценария загрузки.

попробуйте заменить это:

 $file =$rows['file']; 

этим:

 $file = "uploads/".$rows['file']; 

и это:

 readfile('uploads/'.$file); 

этим

 readfile($file); 

если все еще не работает, поместите значение, возвращаемое функцией readfile

ВАЖНЫЙ

Пожалуйста, обратите внимание на проблемы с внедрением sql (см. Комментарий Ondřej Mirtes)

Проблема здесь:

 header('Content-Length: ' . filesize($file)); 

Content-Length получает нулевое значение, а браузер загружает файл нулевой длины, как вы ему сказали. Если $file – путь относительно upload/ , вы должны сделать это:

 header('Content-Length: ' . filesize('upload/'.$file)); 

Убедитесь, что filezise() возвращает правильный размер, и readfile() реально выводит его.

Но другая проблема заключается в том, что вы упомянули папку UPLOAD и uploads . Они не одинаковы, и дело важно. Кроме того, может быть использование относительных путей в 'uploads/'.$file не очень хорошая идея, лучше использовать абсолютный путь. Например, '/var/www/upload/'.$file .