2017-05-07 2 views
1

폴더/mysql에서 파일을 다운로드하는 방법을 약 30 개의 튜토리얼로 시도하지만 필요한 방식으로는 아무 것도 작동하지 않습니다. 그렇다면 나는 this one을 만나고 어떤 점으로 나를 도왔다.가장 작은 ID 번호를 가진 PHP 다운로드 전용 파일

이 튜토리얼은 DB에서 이름을 가져오고 해당 이름을 다운로드 시작합니다. 나는 나의 요구에 맞게 코드를 조정 했으므로 이제 폴더/mysql에있는 모든 파일은 이름, 다운로드 단추 및 삭제 단추를 인쇄하고 이름은 잘 작동하지만 삭제 단추는 가장 작은 ID 번호로 첫 번째 파일 만 다운로드한다.

제발, 지금은 학습을위한 것이기 때문에 준비문이 필요하거나 무언가가 필요하기 때문에 안전하지 않다는 것을 말하지 말아라. 그리고 내가 이것을 이해하고 나면, 나는 더욱 안전해질 것이다. 난 당신이 볼 수 있도록 청소기 코드의 꽤 많이 잘라

files.php

<div class="row" style="display:flex; flex-wrap: wrap;"> 

<?php 

    $query = "SELECT * FROM uploads ORDER BY filename ASC"; 
    $select_uploads = mysqli_query($connection, $query); 

    while($row = mysqli_fetch_assoc($select_uploads)) { 

    $id = $row['id']; 
    $filename = $row['filename']; 
    $filetype = $row['filetype']; 
    $filesize = $row['filesize']; 

?> 

<div class="col-lg-2 col-sm-4 col-md-4 col-xs-12"> 
    <div class="thumbnail text-center"> 
     <div class="caption"> 
      <p class="filename"><small><?php echo $filename; ?></small></p> 


<?php 

    $fetc = "SELECT * FROM uploads LIMIT 1"; 
    $result = mysqli_query($connection, $fetc); 
    if(!$result) { 
     die("QueryFailed" . mysqli_error($connection)); 
    } 

while($row1=mysqli_fetch_array($result)) 
{ 
    $name=$row1['filename']; 
    $type=$row1['filetype']; 

?> 

<p><a name="download" href="download.php?filename=<?php echo $name ;?>" class="btn btn-primary btn-xs" role="button"><i class="fa fa-download"></i> Preuzmi</a></p> 

<?php 
} 
?> 

<form action="" method="post"> 
    <input type="hidden" name="delete_file" value="<?php echo $id; ?>"> 
    <?php 
    echo '<button class="btn btn-danger btn-xs" type="submit" name="delete" onClick=\'javascript: return confirm("Da li ste sigurni da želite da obrišete?"); \'><i class="fa fa-trash-o"></i> Obriši</button>'; 
    ?> 
</form> 

</div> 
</div> 
</div> 

<?php 

} 

?> 

</div> 


<?php 

if(isset($_POST['delete'])) { 

    $id = $_POST['delete_file']; 

    if(isset($_SESSION['user_role'])) { 

     if($_SESSION['user_role'] == 'admin' || $_SESSION['user_role'] == 'superadmin') { 

      unlink("uploads/".$filename); 
      $query = "DELETE FROM uploads WHERE id = {$id} "; 
      $delete_filename = mysqli_query($connection, $query); 
      header("Location: fajlovi.php"); 

     } 

    } 

} 

?> 

download.php

<?php 
function output_file($file, $name, $mime_type='') 
{ 
if(!is_readable($file)) die('File not found or inaccessible!'); 
$size = filesize($file); 
$name = rawurldecode($name); 
$known_mime_types=array(
    "htm" => "text/html", 
    "exe" => "application/octet-stream", 
    "zip" => "application/x-zip-compressed", 
    "7z" => "application/octet-stream", 
    "doc" => "application/msword", 
    "docx"=> "application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
    "jpg" => "image/jpg", 
    "php" => "text/plain", 
    "xls" => "application/vnd.ms-excel", 
    "xlsx"=> "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", 
    "ppt" => "application/vnd.ms-powerpoint", 
    "pptx"=> "application/vnd.openxmlformats-officedocument.presentationml.presentation", 
    "gif" => "image/gif", 
    "pdf" => "application/pdf", 
    "txt" => "text/plain", 
    "html"=> "text/html", 
    "png" => "image/png", 
    "jpeg"=> "image/jpg" 
); 

if($mime_type==''){ 
    $file_extension = strtolower(substr(strrchr($file,"."),1)); 
    if(array_key_exists($file_extension, $known_mime_types)){ 
     $mime_type=$known_mime_types[$file_extension]; 
    } else { 
     $mime_type="application/force-download"; 
    }; 
}; 

//turn off output buffering to decrease cpu usage 
@ob_end_clean(); 

// required for IE, otherwise Content-Disposition may be ignored 
if(ini_get('zlib.output_compression')) 
ini_set('zlib.output_compression', 'Off'); 
header('Content-Type: ' . $mime_type); 
header('Content-Disposition: attachment; filename="'.$name.'"'); 
header("Content-Transfer-Encoding: binary"); 
header('Accept-Ranges: bytes'); 

// multipart-download and download resuming support 
if(isset($_SERVER['HTTP_RANGE'])) 
{ 
    list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); 
    list($range) = explode(",",$range,2); 
    list($range, $range_end) = explode("-", $range); 
    $range=intval($range); 
    if(!$range_end) { 
     $range_end=$size-1; 
    } else { 
     $range_end=intval($range_end); 
    } 

    $new_length = $range_end-$range+1; 
    header("HTTP/1.1 206 Partial Content"); 
    header("Content-Length: $new_length"); 
    header("Content-Range: bytes $range-$range_end/$size"); 
} else { 
    $new_length=$size; 
    header("Content-Length: ".$size); 
} 

/* Will output the file itself */ 
$chunksize = 1*(1024*1024); //you may want to change this 
$bytes_send = 0; 
if ($file = fopen($file, 'r')) 
{ 
    if(isset($_SERVER['HTTP_RANGE'])) 
    fseek($file, $range); 

    while(!feof($file) && 
     (!connection_aborted()) && 
     ($bytes_send<$new_length) 
     ) 
    { 
     $buffer = fread($file, $chunksize); 
     echo($buffer); 
     flush(); 
     $bytes_send += strlen($buffer); 
    } 
fclose($file); 
} else 
//If no permissiion 
die('Error - can not open file.'); 
//die 
die(); 
} 
//Set the time out 
set_time_limit(0); 

//path to the file 
$file_path='uploads/'.$_REQUEST['filename']; 


//Call the download function with file path,file name and file type 
output_file($file_path, ''.$_REQUEST['filename'].'', 'text/plain'); 
?> 

:

내 코드입니다 . 나쁜 영어로 죄송합니다. 문제를 제대로 설명했기를 바랍니다.

답변

1

files.php 모듈에는 두 개의 중첩 쿼리가 있습니다. 첫 번째는 파일 이름순으로 uploads 테이블의 모든 행을 순서대로 가져옵니다. 승인.

첫 번째 쿼리 내에 중첩 된 두 번째 쿼리는 테이블에서 (LIMIT 1) 한 행만 개를 가져옵니다. 아마 당신이 그것을 실행할 때마다 같은 행을 가져옵니다.

중첩 된 두 번째 쿼리를 제거하고 첫 번째 쿼리의 결과 집합을 사용해야합니다. 이 같은 뭔가 : (주, 나는 그것이 당신까지이 디버깅하지 않은 주시기 바랍니다.)

<?php 

$query = "SELECT * FROM uploads ORDER BY filename ASC"; 
$select_uploads = mysqli_query($connection, $query); 

while($row = mysqli_fetch_assoc($select_uploads)) { 

    $id = $row['id']; 
    $filename = $row['filename']; 
    $filetype = $row['filetype']; 
    $filesize = $row['filesize']; 
    ?> 
    <div class="col-lg-2 col-sm-4 col-md-4 col-xs-12"> 
     <div class="thumbnail text-center"> 
      <div class="caption"> 
       <p class="filename"><small><?php echo $filename; ?></small></p> 
       <p><a name="download" href="download.php?filename=<?php echo $filenae ;?>" class="btn btn-primary btn-xs" role="button"><i class="fa fa-download"></i> Preuzmi</a></p> 
      </div> 
     </div> 
    </div> 
    <?php 
} 
?> 

제안합니다.

  1. 중첩 구조를 한 눈에 볼 수 있도록 코드를 들여 쓰도록하십시오.
  2. 삭제 부분을 구현하기 전에 프로젝트의 다운로드 부분을 가져 오십시오.
+0

나는 두 번째 쿼리와 사용자 $ filename을 제외하고 첫 번째 쿼리에서 $ file 변수를 제외하고 잘 작동합니다. 너무 복잡해 보입니다. 감사합니다 존스. – shone83