Проблема: после загрузки файл не содержит данных. т.е. он становится пустым.
Поэтому, пожалуйста, помогите мне в этом.
<?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
.