我想提供一个简单的代码,让我根据URL中指定的ID下载文件。为此,它连接到数据库并尝试获取与ID关联的文件的信息。然后,它会使用提取的信息和文件发送标题。
但由于我不知道的原因,它会输出一个空白页面。在任何地方都没有任何日志文件,只是突然停止。
拜托,真的很感激。谢谢你花时间
<?php
//We include the variables needed to do the connection to the db
include '../php/vars.php';
$id=$_GET['id'];
//We connect to the database
$con = mysql_connect("$dbsv","$dbuser","$dbpass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("$dbname", $con);
// We do the query
if ($query === false) {echo mysql_error();}
$query = "SELECT name,filetype FROM links WHERE id=$id";
$result = mysql_query($query);
// Check result. This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = 'Invalid query: ' . mysql_error() . "\n";
$message .= 'Whole query: ' . $query;
die($message);
}
while ($row = mysql_fetch_assoc($result))
{
// Assign variables
$filename = $row['name'];
$type = $row['filetype'];
}
//We download the file
if (file_exists($filename)) {
header('Content-Description: File Transfer');
header( "Content-type: $type");
header('Content-Disposition: attachment; filename='.basename($filename));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
fopen("$filename", "r");;
exit;
}
?>
我不是英国人。期待语法,语法和错误。如果您发现它们,请通知我。
答案 0 :(得分:0)
我认为你想传递文件吗?
fopen("$filename", "r");
用
替换它readfile($filename);
fopen只是打开一个文件指针并且对文件本身绝对没有任何意义,你必须使用fread,write和fclose来处理文件,还有更多的操作,但基本上fopen只是给你一个文件指针
答案 1 :(得分:0)
有很多逻辑错误,您需要修复:
if ($query === false) {echo mysql_error();}
此时未设置 $query
。所以它永远不会false
。 (你基本上是在说if (null === false)
)
while ($row = mysql_fetch_assoc($result))
{
// Assign variables
$filename = $row['name'];
$type = $row['filetype'];
}
//We download the file
if (file_exists($filename)) {
根据您的结果计数,您多次覆盖$filename
- 然后仅对最后一个值执行操作。
while
循环。然后:
fopen("$filename", "r");
您正在打开文件 - 然后呢?什么也不做。继续fread()
,直到达到EOF
,然后使用fclose($handle)
bevor输出结果。
(这是简单地看不见的原因)
答案 2 :(得分:0)
您将使用readfile()代替。 readfile()读取文件并将其写入输出缓冲区。
以下是手动链接http://php.net/manual/en/function.readfile.php
if (file_exists($filename)) {
header('Content-Description: File Transfer');
header( "Content-type: $type");
header('Content-Disposition: attachment; filename='.basename($filename));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
}