2012-08-29 53 views
0

这让我陷入了很长时间,经过大量研究,我尝试了几种方法。php文件下载头文件

这是我对我的下载文件当前的代码:

<?php 
    require_once ('./newpub_profile.php'); 
    $thetitle = $row['title']; 
    $thesize = $row['size']; 

function filedownload() { 
    GLOBAL $thesize, $thetitle; 
    header("Content-Type: application/msword"); 
    header("Content-Disposition: attachment; filename=".$thetitle); 
    header("Content-Length: ".$thesize); 
    header("Content-Transfer-Encoding: binary"); 
    readfile($realfile); 
} 
?> 

在另一个PHP页面我填充查询结果的表,每个结果获得相应的下载链接。如果将鼠标悬停在链接上,我可以验证其下载ID是否正确(在MySQL数据库中)。下载链接目前指向包含上述代码的download.php。此代码允许我下载标题为“download.php”的文件,其中不包含任何内容。我从用户配置文件页面调用函数“filedownload()”。

这是怎么了显示的下载链接:

while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC)) 
     { 
      echo '<tr><td align="left">' . 
      $row['title'] . '</td><td align="left">' 
      . $row['genre'] . '</td><td align="left">' 
      . $row['length'] . '</td><td align="left">' 
      . $row['created'] . '</td><td align="left">' 
      //. $row['views'] . '</td><td align="left">' 
      . "<a href='download.php?id={$row['upload_id']}'>Download</a></td>" . '</td></tr>'; 
     } 

下面是从中调用头功能的页面代码。

<?php if (isset($_POST['query'])) 
    { 
    require_once (connectionToDB); //Connect to the db 

    // Make the query 
    $genre = $_POST['select_genre']; 
    $length = $_POST['select_length']; 

    $upviews = "UPDATE upload 
       SET views = views + 1 
       WHERE genre = '$genre' AND length = '$length'"; 
    $runviewupdate = mysqli_query ($dbc, $upviews); 


    $q = "SELECT upload_id, title, genre, length, created 
     FROM upload 
     WHERE genre = '$genre' AND length = '$length' 
     ORDER BY created DESC, title DESC"; 


    $r = mysqli_query ($dbc, $q); // Run the query 

    if($r) 
    { 
     // If it ran okay, display the records 
     echo '<table align="center" 
      cellspacing="3" cellpadding="3" 
      width="75%"> 
      <tr><td align="left"><b>Title</b></td> 
      <td align="left"><b>Genre</b></td> 
      <td align="left"><b>Pages</b></td> 
      <td align="left"><b>Submitted</b></td> 
      <td align="left"><b>Download</b></td>'; 

     // Fetch and print all the records: 

     while ($row = mysqli_fetch_array($r,MYSQLI_ASSOC)) 
     { 
      echo '<tr><td align="left">' . 
      $row['title'] . '</td><td align="left">' 
      . $row['genre'] . '</td><td align="left">' 
      . $row['length'] . '</td><td align="left">' 
      . $row['created'] . '</td><td align="left">' 
      //. $row['views'] . '</td><td align="left">' 
      . "<a href='newpub_profile.php?id={$row['upload_id']}'>Download</a></td>" . '</td></tr>'; 
     } 
     echo '</table>'; // Close the table 

     mysqli_free_result ($r); // Free up the resources 
    } 
    else // If it did not run okay 
    { 
     // Public Message: 

     echo '<p class="error">Your submissions could not be retrieved. We 
      apologize for any inconvenience.</p>'; 

     // Debugging message: 

     echo '<p>' . mysqli_error($dbc) . '<br /><br />Query: ' . $q . '</p>'; 

    } // End of if ($r) IF. 



} 

//END DOWNLOAD HANDLER ****************************************************** 


    mysqli_close($dbc); // Close the database connection 



if(isset($_GET['id'])) { 
// Get the ID 
    $id = intval($_GET['id']); //var_dump($id); 

    require_once ('../mysqli_connect.php'); //Connect to the db 

// Fetch the file information 

    if($stmt = $mysqli -> prepare("SELECT `file_type`, `size`, `title`, 'content', 'upload_id' 
      FROM `upload` 
      WHERE `upload_id` =?")) { 

     /* Bind parameters 
     s - string, b - boolean, i - int, etc */ 
     $stmt -> bind_param("sissi", $file_type, $size, $title, $content, $upload_id); 

     /* Execute it */ 
     $stmt -> execute(); /*FINISH PREPARED STATEMENTS*/ 

     /* Bind results */ 
     $stmt -> bind_result($result); 

     /* Fetch the value */ 
     $stmt -> fetch(); 

     //echo $user . "'s level of priviledges is " . $result; 

     /* Close statement */ 
     //$stmt -> close(); 


     if($result) { 
      // Make sure the result is valid 
      if (mysqli_num_rows($result) > 0) { 
      // Get the row 
       $row = mysqli_fetch_assoc($result); 
       //var_dump($row); 
       //$data = $row; 

       $place = './uploads/'.$_SESSION_['email'].'/'; 
       $thefile = $place.$row['title']; 
       $realfile = $thefile; 
       $thetitle = $row['title']; 
       $thesize = $row['size']; 

       require_once('./download.php'); 
       filedownload(); 






      } 
      else { 
       echo 'Error! No such ID.'; 
      } 

      // Free the mysqli resources 
      mysqli_free_result($result); 
     } 
     else { 
      echo "Error! Query failed: <pre>{$dbc->error}</pre>"; 
     } 
     mysqli_close($dbc); 
     $stmt -> close(); 
      } 




    } 


        ?> 
+3

到底是什么问题? – Cfreak

+0

下载链接不会从我的文件系统下载文件内容。相反,我的浏览器正在下载一个名为“download.php”的文件,并且是一个没有内容的空白页面。 – V1GG3N

+0

你使用什么浏览器和版本?你有没有尝试在其他浏览器?不同的浏览器需要不同的标题。 – Nilpo

回答

1

您创建了一个功能filedownload(),但你永远不会调用它,所以永远不会执行它的身体。你也从来没有定义$realfile,你想发送文件的路径。

调用你的函数:

<?php 
    require_once ('./newpub_profile.php'); 
    $thetitle = $row['title']; 
    $thesize = $row['size']; 

function filedownload() { 
    GLOBAL $thesize, $thetitle; 
    header("Content-Type: application/msword"); 
    header("Content-Disposition: attachment; filename=".$thetitle); 
    header("Content-Length: ".$thesize); 
    header("Content-Transfer-Encoding: binary"); 
    readfile($realfile); 
} 

filedownload(); 
?> 

尽管似乎没有被摆在首位你有一个原因,在功能:

<?php 
    require_once ('./newpub_profile.php'); 
    $thetitle = $row['title']; 
    $thesize = $row['size']; 

    header("Content-Type: application/msword"); 
    header("Content-Disposition: attachment; filename=".$thetitle); 
    header("Content-Length: ".$thesize); 
    header("Content-Transfer-Encoding: binary"); 
    readfile($realfile); 
?> 
+0

我正在从不同的页面(用户个人资料页面)呼叫我的功能。用户配置文件页面加载一个包含链接的表格,正如我在上面的代码中更新的那样。我希望链接取得我的download.php代码并将文件提供给用户。 – V1GG3N

+0

那么,直接的未解决的问题仍然是缺少'$ realfile'文件的服务。你告诉它发送一个未定义变量的文件。即使你在另一个页面中定义了'$ realfile',它也不在函数的范围内。 –

+0

我更新了问题陈述以包含调用页面。预先感谢您的帮助。 – V1GG3N