我有两个php文件
1. List_files - >显示所有上传的文件
2. Get_file - >从列出的文件中下载文件...
现在,当我下载任何图像或任何文本文档并尝试打开它时,它无法打开,
错误是每次都不支持格式。
我的图片是.jpeg
我正在使用Windows Vista和Firefox 下载没问题,问题是打开文件..
get_file.php
<?php
// Make sure an ID was passed
if(isset($_GET['id']))
{
// Get the ID
$id = intval($_GET['id']);
// Make sure the ID is in fact a valid ID
if($id <= 0)
{
die('The ID is invalid!');
}
else
{
// Connect to the database
$con=mysql_connect("localhost","root","");
if(!$con)
{
die('Could Not Connect:'.mysql_error());
}
mysql_select_db("tcs",$con);
// Fetch the file information
$query = "SELECT `mime`, `name`, `size`, `data` FROM `file` WHERE `id` = {$id}";
$result=mysql_query($query,$con);
if($result)
{
$count = mysql_num_rows($result); // Make sure the result is valid
if($count == 1)
{
// Get the row
$row = mysql_fetch_array($result);
// Print headers
header("Content-Type: ".$row['mime']);
header("Content-Length: ".$row['size']);
header("Content-Disposition: attachment; filename=".$row['name']);
// Print data
echo $row['data'];
}
else
{
echo 'Error! No image exists with that ID.';
}
// Free the mysqli resources
//mysql_free_result($result);
}
else
{
echo "Error! Query failed: <pre>".mysql_error()."</pre>";
}
mysql_close();
}
}
else
{
echo 'Error! No ID was passed.';
}
?>
答案 0 :(得分:2)
您在问题中发布了错误的文件,这是一个文件列表,但问题很可能出在另一个文件get_files.php
。
最有可能的是,您没有发送“内容类型”标头。 如果你说它是一个JPEG图像,那么它应该是
header("Content-Type: image/jpeg");
如果您想将其作为下载(而不是在浏览器中打开),则可以添加一个标题
header("Content-Disposition: attachment;filename=your_current_filename.jpg");
答案 1 :(得分:1)
您的问题出在get_files.php
。很可能它没有设置正确的content-type header。
答案 2 :(得分:0)
我猜测问题在于:header("Content-Disposition: attachment; filename=".$row['name']);
文件名仅限于US-ASCII
且不应包含空格。所以你可能需要对文件名进行一些清理。 (有些人确实使用空格,并用引号将文件名括起来。这样可行,但它不合标准。)
答案 3 :(得分:0)
将此添加到标题
header("Content-type: application/octet-stream");
这可能会解决您的问题。
答案 4 :(得分:0)
好。我们需要做一些调试。使用工具向您显示正在发送的实际PHP标头。 (我喜欢Web-Sniffer.net。还有一些Firefox插件可以做到这一点。)
删除Content-Length标题:对于渐进式下载栏很有用,但这是不必要的;如果这是错的,那可能会让事情变得更糟。
删除Content-Disposition标头。查看是否正在提供正确的文件。
基本上,在将它们拼接在一起之前,分别检查代码的每个小部分。这样,您就可以了解错误的位置。