2016-09-07 2 views
2
<?php 
// Make sure an ID was passed 
include('include/function.php'); 
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 
     $dbLink = new mysqli('localhost', 'root', 'jio', 'jio'); 
     if(mysqli_connect_errno()) { 
      die("MySQL connection failed: ". mysqli_connect_error()); 
     } 

     // Fetch the file information 
     $query = " 
      SELECT `id`,`date`,`expected_date`,`comname`,`type`,`name`,`path`,`mime`, `size`, `data`,`other_detail`,`remark`,`username` 
      FROM `depository` 
      WHERE `id` = {$id}"; 
     $result = $dbLink->query($query); 

     if($result) { 
      // Make sure the result is valid 
      if($result->num_rows == 1) { 
      // Get the row 
       $row = mysqli_fetch_assoc($result); 

       // Print headers 

       header("Content-Type: ". $row['mime']); 
       header("Content-Length: ". $row['size']); 
       header("Content-Disposition: attachment; filename=". $row['name']); 


      } 
      else { 
       echo 'Error! No image exists with that ID.'; 
      } 

      // Free the mysqli resources 
      mysqli_free_result($result); 
     } 
     else { 
      echo "Error! Query failed: <pre>{$dbLink->error}</pre>"; 
     } 
     mysqli_close($dbLink); 
    } 
} 
else { 
    echo 'Error! No ID was passed.'; 
} 
?> 

Я пытаюсь загрузить файл из местоположения пути (doc root), но получаю пустую загрузку файла или поврежденную загрузку файла. любой может предложить мне, где я ошибаюсь в вышеуказанном коде или использовать что-либо еще.не удается загрузить файл в linux с помощью php

+2

Вы отправляете заголовки, но где вы отправляете фактическое содержимое файла? – jeroen

+0

Распечатать данные echo $ row ['path']; –

+0

Проверьте, нет ли другого выхода, такого как предупреждения или символы, которые отправляются в выходной буфер перед содержимым файла. Это испортит ситуацию и приводит к повреждению файлов. – jannej

ответ

0

После отправки заголовков вам необходимо прочитать содержимое файла и отправить эти данные - следующее не проверено, но более или менее то, что вам нужно сделать. Вам, вероятно, потребуется настроить переменную $filepath в соответствии с содержимым $row['path'] из результата sql.

if($result->num_rows == 1) { 
    $row = mysqli_fetch_assoc($result); 

    header("Content-Type: ". $row['mime']); 
    header("Content-Length: ". $row['size']); 
    header("Content-Disposition: attachment; filename=". $row['name']); 

    /* you need to actually read the file and send it */ 

    $filepath=$row['path'] . '/' . $row['name']; 
    if(!realpath($filepath)) exit('Filepath '.$filepath.' is incorrect'); 

    if($file = fopen($filepath, 'rb')) { 
     while(!feof($file) and (connection_status()==0)) { 
      print(fread($file, 1024*8)); 
      flush(); 
     } 
     fclose($file); 
    } 

} 
+0

Да, решено @RamRider –

Смежные вопросы