2011-12-20 3 views
1

:어떻게 다운로드 수에 문서

<input type="button" class="downloadedFile" value="Download File" onclick="window.location.href=\'documents/' . $docsRow['docFileName'] . '\'" /> 

$ docsRow [ 'docFileName']는 각 문서의 경로입니다 MySQL 데이터베이스에서 검색됩니다.

더 큰 그림은 이러한 문서가 각 아코디언 창에는 하나 개 이상의 문서와 클래스 인 상태, JQuery와 아코디언에 있다는 것입니다 - 같은 같은 :

<div id="accordion"> 
<h3><a href="#">LEAD5220 - Leader as Change Agent</a></h3> 
<div> 
    <p class="className">Leader as Change Agent</p> 
    <p class="classNumber">LEAD5220</p> 
     <hr class="classSeparator" /> 
     <table width="95%"> 
      <tr> 
       <td><strong>Document Name:</strong> Generic Annotation Format</td> 
       <td width="100px" align="right"><input type="button" class="downloadedFile" value="Download File" onclick="window.location.href='documents/Generic Annotation Format.docx'" /></td> 
      </tr> 
      <tr> 
       <td colspan="2"><strong>Description:</strong> This document can be used as a template for your annotations in the annotated bibliography forums.</td> 
      </tr> 
     </table> 
     <hr class="classSeparator" /> 
     ... 

내 클라이언트가 수를 계산 할 수 싶어 각 문서는 클래스 당 번 다운로드되었습니다.

나는 자바 스크립트를 통해 버튼 클릭을 감지 할 수 있고 "클래스 별"부분까지 jQuery를 사용하여 버튼이 클릭 된 클래스 테이블을 감지 할 수 있지만 이해할 수없는 부분은 1) 데이터베이스에 기록 할 PHP/MySQL 코드로 정보를 가져 오는 방법, 2) 버튼 클릭 만 감지 할 수 있는지 또는 사용자가 실제로 파일을 컴퓨터에 다운로드했는지 여부를 감지 할 수 있는지 여부 (PDF, DOC, XLS 파일).

누구에게 도움을 주셔서 감사합니다.

답변

4

다운로드 횟수를 세는 데는 두 가지 옵션이 있습니다. 하나는 모든 히트를 기록하고 실제 파일로 리디렉션하는 PHP 페이지에 링크하는 것입니다. 링크가 같은 것을 할 수있는 HTML에서

<? 
$class = $_REQUEST['class']; 
$doc = $_REQUEST['doc']; 

// insert the code here to get and update the number of hits to this class/doc 

// now redirect 
header('Location: http://www.example.com/thefile.doc'); 
    ?> 

:처럼 뭔가 내가 개인적으로 선호하는

<a href="getfile.php?class=X&doc=Y">download file</a> 

두 번째 방법은, 아약스와 히트 수를 기록하는 것입니다. 사용자가 다운로드하는 링크를 클릭하면 같은 수행

$('a.thelink').click(function() { 
    $.post ('getfile.php', { class: X, doc: Y }); 
}); 

는 데이터가 기록 될 보낼 이런 식으로, 사용자는 같은 페이지에 유지됩니다.

더 많은 정보가 필요하면 알려주십시오.

+0

Duh! 아약스! 내가 이미 사이트의 나머지 부분에 그것을 많이 사용하고있는 것처럼! (나는 단지 6 개월의 일시 중지 후이 사이트로 나 자신을 reacquainting하고있다) 고마워, Moshe (그리고 DaDaDom, 물론)! – marky

+0

기꺼이 도와 드리겠습니다. –

3

두 번째 부분은 다음과 같습니다. 사용자가 문서를 요청하면 얻습니다. HTTP는 상태 비 저장이므로 클릭 한 번만 사용자에게 전송 된 금액이 문서의 크기와 같은지 확인하려고 할 수 있습니다.하지만 실제로는 불가능합니다.

첫 번째 부분은 문서에 직접 연결하지 말고 대신 다운로드를 계산하고 매개 변수를 존중하며 실제 문서로 리디렉션하는 PHP 페이지에 연결하십시오. 또는 원하는대로 문서의 바이너리 내용을 반환 할 수 있습니다.

+0

나에게 자리를 소리 urlencode($filename);

문서 counter.php하는 것을 잊지 마세요 document-counter.php?file=path/file.ext

로 PHP 파일을 호출합니다. –

+0

답장을 보내 주셔서 감사합니다. 나는 그들이 실제로 그것을 다운로드했는지 아닌지에 관해서 많은 것을 알았다. - 당신이 첫 번째 부분에 답하는 한, 다운로드를 계산하는 PHP 페이지에 링크하는 것이 무엇을 의미하는지 명확하지 않습니다. 좀 더 자세한 설명을 주시겠습니까? 아마도 의사 코드일까요? 감사! – marky

+0

자세한 기술적 인 설명은 Moshe Shahams 응답을 참조하십시오. –

0

또 다른 aproach는 각 다운로드를 기록하는 PHP 문서를 통해 문서를 직접 제공하는 것입니다.

당신은

<?php 
if (! isset($_GET['file'])) { 
    die ('_GET file not set'); 
} 

$file = realpath($_SERVER['DOCUMENT_ROOT'] . urldecode($_GET['file'])); 
if (! file_exists($file)) { 
    die($file . ' not exists'); 
} 

$size = filesize($imageFile); 
$extension = pathinfo ($imageFile, PATHINFO_EXTENSION); 

header('HTTP/1.1 200 OK'); 
header('Pragma: no-cache'); 
// Attention: the following line can vary depending of the extension of the file ! 
header('Content-Type: application/' . $extension); 
header('Content-Length: ' . $size); 

// here, ***after the header***, goes all the stuff for incrementing the counters and 
// saving them 

readfile($imageFile); 
관련 문제