2013-06-07 2 views
0

헬로 PHP로 다운로드 스크립트를 만들려고합니다 ... 업로드 양식이 좋아요. 'upload/'에 파일을 저장하지만 파일 이름이 DB에 저장되어 있지만 다운로드 할 때 파일이 다운로드됩니다. 어떤 이미지, 내가 그것을보고 싶을 때 그것은 단지 빨간 X 여기 같습니다 : image .... 어떤 아이디어?PHP 스크립트 이미지 다운로드

<?php 
include 'connect.php'; 


    $query = "SELECT * FROM topics WHERE topic_id = '". $_GET['topic_id'] ."' "; 

    $result = mysql_query($query); 
    $row = mysql_fetch_array($result); 
    $name = $row['topic_subject']; 
    $file = $row['topic_file']; 


    header('Pragma: public'); 
    header('Content-Description: File Transfer'); 
    header("Content-Disposition: attachment; filename='".$file . "'"); 
    header("Content-Type: ".mime_content_type($file).""); 
    header("Content-Length: " . filesize($file) ." "); 
    header('Content-Transfer-Encoding: binary'); 
    readfile('uploads/',$file); 
    ob_clean(); 
    flush(); 

?> 

답변

4

전화 번호는 readfile입니다. 파일 경로를 파일 이름에 연결하려면 .을 사용해야하므로 대체하십시오.

readfile('uploads/',$file); 

readfile('uploads/'.$file); 
+0

여전히 같은 오류 ... 파일을 다운로드했습니다. 예 : elephant.jpg _upload_ 디렉토리에서하지만 내가 열었을 때 내가 말했듯이 빨간 X 만입니다 : S – boska0712

+0

파일이 존재하지 않을 가능성이 큽니다. 브라우저에서 PHP 페이지를 실행할 수 있고 파일 내용을 출력하는 대신 파일이 실제로 해당 위치에 있는지 확인하려면'var_dump (file_exists ('uploads /'.$ file));'를 사용하십시오. – Pudge601

+0

실행할 때 _boolean false_가 반환되었습니다. S – boska0712

0

와 나는 파일 다운로드에 대한 내 자신의 스크립트를 사용하고 있습니다. 그 최고의 내가 이제까지 찾는다. 사용자 요구 사항으로 수정할 수도 있습니다.

function download_file($Source_File, $Download_Name, $file_extension = '') { 
    /* 
     $Source_File = path to a file to output 
     $Download_Name = filename that the browser will see 
     $file_extension = MIME type of the file (Optional) 
    */ 
    if (!is_readable($Source_File)) 
     die('File not found or inaccessible!'); 

    $size = filesize($Source_File); 
    $Download_Name = rawurldecode($Download_Name); 

    /* Figure out the MIME type (if not specified) */ 
    $known_mime_types = array(
     "pdf" => "application/pdf", 
     "csv" => "application/csv", 
     "txt" => "text/plain", 
     "html" => "text/html", 
     "htm" => "text/html", 
     "exe" => "application/octet-stream", 
     "zip" => "application/zip", 
     "doc" => "application/msword", 
     "xls" => "application/vnd.ms-excel", 
     "ppt" => "application/vnd.ms-powerpoint", 
     "gif" => "image/gif", 
     "png" => "image/png", 
     "jpeg" => "image/jpg", 
     "jpg" => "image/jpg", 
     "php" => "text/plain" 
    ); 

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

    @ob_end_clean(); //off output buffering to decrease Server usage 
    // if IE, otherwise Content-Disposition ignored 
    if (ini_get('zlib.output_compression')) 
     ini_set('zlib.output_compression', 'Off'); 

    header('Content-Type: ' . $mime_type); 
    header('Content-Disposition: attachment; filename="' . $Download_Name . '"'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Accept-Ranges: bytes'); 

    header("Cache-control: private"); 
    header('Pragma: private'); 
    header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); 

    // 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); 
    } 

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

     while (!feof($Source_File) && 
     (!connection_aborted()) && 
     ($bytes_send < $new_length) 
     ) { 
      $buffer = fread($Source_File, $chunksize); 
      print($buffer); //echo($buffer); // is also possible 
      flush(); 
      $bytes_send += strlen($buffer); 
     } 
     fclose($Source_File); 
    } else 
     die('Error - can not open file.'); 
    die(1); // A response code other than 0 is a failure 
} 

이 정보가 도움이되기를 바랍니다.

건배!

Mudassar 알리

0

당신은 ReadFile을() 함수에 이미지의 전체 경로를 제공해야합니다.

관련 문제