PHP& MYSQL空白结果。脚本突然停止了。没有错误日志

时间:2014-08-28 15:25:06

标签: php mysql

我想提供一个简单的代码,让我根据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;
}
?>

我不是英国人。期待语法,语法和错误。如果您发现它们,请通知我。

3 个答案:

答案 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循环。
  • 如果您期望单个结果,请不要使用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;
}