2012-11-19 7 views
-1

PHP로 작성된 다운로드 스크립트가 있습니다. 내보기 파일 스크립트는 ID에 연결 한 다음 ID와 일치하는 모든 데이터를 선택합니다.다운로드 PHP는 항상 손상되었습니다

그런 다음 데이터를 사용하여 사진을 다운로드합니다. 내 사진이 폴더에 있는지가 중요합니까? 폴더로 이동 한 후 디렉토리가 MYSQL 데이터베이스로 업로드됩니다.

지금 코드는 일부 파일을 완벽하게 다운로드 한 다음 대다수를 손상시킬 수 있습니다. 이유가 뭐야? 당신이 데이터를 에코 후 PHP가 어떤 정보를 전송하기 때문에이 문제가 발생

Mysql table info... 
    $cool = $_GET['id']; 

    $sql = "SELECT id, type, name, size FROM upload WHERE id='$cool'"; 

    $result = mysql_query($sql, $db); 
    $data = mysql_result($result, 0, "id"); 
    $name = mysql_result($result, 0, "name"); 
    $size = mysql_result($result, 0, "size"); 
    $type = mysql_result($result, 0, "type"); 

    header("Content-type: $type"); 
    header("Content-length: $size"); 
    header("Content-Disposition: attachment; filename=$name"); 
    header("Content-Description: PHP Generated Data"); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    ob_clean(); 
    flush(); 
    readfile($name); 
    exit(); 
+7

그 불쾌한 @을 제거하십시오 –

+5

[** 새 코드 **에서 mysql_ * 함수를 사용하지 마십시오. http://bit.ly/phpmsql. 그들은 더 이상 유지 관리되지 않으며 [비추천 프로세스] (http://j.mp/Rj2iVR)가 시작되었습니다. [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). –

+0

mysql을 가지고 있다면 최소한 mysql_result를 사용하지 마십시오. '$ row = mysql_fetch_assoc ($ result);가 잘못되었습니다. echo $ row [ 'data']'? –

답변

1

,이에 대한 솔루션은 데이터를 반향 후이 잘 echo $dataexit(); 추가에 대한 처리 권한을 중지하는 것입니다.

+0

여전히 파일의 끝에있는 –

+0

데이터가 너무 많이 손상되지 않습니다. 파일의 FRONT에 삽입 된 데이터는 대개 파일을 삭제합니다. @NoahSmith : 텍스트/16 진 편집기에서 다운로드 한 파일을 열고 파일에 포함 된 PHP 경고/오류를 찾습니다. –

+0

@MarcB, 텍스트 파일은 그다지 손상되지 않지만 바이너리 파일은 읽을 수 없습니다. 하지만 네 16 진수 편집기가 도움이 될 수도 있고 메모장에서 파일을 볼 수도 있습니다. ++ – Rafael

관련 문제