我开发了一个网页,我想创建一个下载部分。我有一个PHP代码下载文件,但我已经尝试了很多次,但它不起作用。我继续看到错误消息,但picture.jpg文件与download.php和index.php在同一目录中。我不知道问题是什么。
download.php的内容:
<?php
if (isset($_GET[‘file’]) && basename($_GET[‘file’]) == $_GET[‘file’]) {
$filename = $_GET[‘file’];
} else {
$filename = NULL;
}
$err = ‘<p style="color:#990000">Sorry, the file you are requesting is unavailable.</p>’;
if (!$filename) {
echo $err;
} else {
$path = ‘downloads/’.$filename;
if (file_exists($path) && is_readable($path)) {
$size = filesize($path);
header('Content-Type: application/octet-stream');
header('Content-Length: '.$size);
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
$file = @ fopen($path, ‘rb’);
if ($file) {
fpassthru($file);
exit;
} else {
echo $err;
}
} else {
echo $err;
}
}
?>
index.php的内容:
<a href="download.php?file=picture.jpg">Download file</a>
答案 0 :(得分:1)
我认为字符‘
和’
搞砸了。尝试用普通单引号('
)替换它们,并在从某人的博客上复制代码时更加小心。 ;)
答案 1 :(得分:0)
file_exists()
和is_readable()
不喜欢相对路径。改为使用绝对路径。
您可以使用$path = $_SERVER['DOCUMENT_ROOT'] . "/$filename";
答案 2 :(得分:0)
我将以下代码用于我的应用程序,这对我有用。
if(file_exists($path . $file)){
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . $file . "\"");
header("Content-Length: " . filesize($path . $file));
readfile(base64_decode($path . $file);
}else{
// No file, do something