2012-03-15 3 views
2

PHP에서 일정 기간 동안 하나의 파일에 대한 동적 다운로드 링크를 만들거나 그 시간이 지나면 다운로드 링크가 만료되는 방법이 있습니까? 이 기간이 지나면 다운로드 링크가 변경됩니다.PHP에서 동적 다운로드 링크를 만드는 방법

실제로 다운로드 링크는 특정 이메일을 통해서만 액세스 할 수 있어야한다는 요구 사항이 있습니다. 파일 크기 때문에 첨부 파일로 추가 할 수 없습니다.

어느 누구도이 문제를 해결할 수 있습니까?

+0

여기에 많은 것을 요구하고 있습니다. 당신이 고심하고있는 특정 코드가 있습니까? php가 이러한 모든 작업을 수행 할 수 있는지 여부를 알고 싶다면 네가 할 수 있습니다. – user783322

+0

아래 5 단계를 수행하면 정말 좋은 솔루션을 얻을 수 있습니다. 문서를 읽고 세부 정보를 찾아야하지만 더 자세한 정보는 내 대답에 자유롭게 설명해야합니다. – gahooa

답변

5

하나 개의 솔루션 :

  1. 데이터베이스 테이블 만들기 hich는 큰 고유 ID (무작위) 및 다운로드 할 파일의 이름/위치/내용을 저장합니다. 또한 만료일을 포함하십시오.

    http://yoursie.com/download/fsdhfs7dfsniuf92un3f2 
    
  2. 이 좋은 찾고 링크 통과를 캡처 아파치 재 작성 규칙 (mod_rewrite를)를 사용

    id     | filename   | expires 
    ----------------------+--------------------+-------------------- 
    fsdhfs7dfsniuf92un3f2 | secret.doc   | 2012-03-23 23:32:32 
    sdf8shdf829nf32ufn23f | secret2.doc  | 2012-03-13 23:32:33 
    
  3. 이메일 최종 사용자에게 링크 ... 링크 같은 것을해야한다 그것을 PHP 페이지로 : 해당 스크립트에서

    RewriteEngine on 
    RewriteRule ^/download/([a-z0-9]{20})$ /download.php?id=$1 
    
  4. , download.php, $_GET['id'] 봐. 데이터베이스 조회를 실행하여 레코드를 찾으십시오. 만료일을 확인하십시오. 모두 정상이면, 계속하십시오.

  5. PHP 스크립트를 사용하여 올바른 헤더를 출력하고 파일을 다운로드하거나 nginx와 같은 프런트 엔드 프록시에 내부 리디렉션을 보내면 다운로드 프로세스가 nginx로 오프로드되고 다운로드와 함께 PHP가 묶이지 않습니다 .

어느 쪽이든, 최종 사용자에게 보낼 수있는 안전하고 만료 된 링크가 있습니다.

주의하십시오!

+0

예 데이터베이스 테이블을 통해 링크 만료를 추가하는 것은 효과적입니다. 그러나 사용자가 이메일에서 해당 링크를 클릭하면 특정 이메일의 들어오는 다운로드 링크를 알 수있는 방법이 있습니다 – user434509

+0

@ user434509 : 이메일 주소를에 추가하십시오. db 테이블을 생성하고 각 이메일 주소에 대해 고유 한 링크를 생성합니다. – gahooa

2

확실한 식별자와 만료 타임 스탬프와 함께 파일 경로를 데이터베이스에 저장하십시오. 그런 다음 사용자가 get 변수에서 고유 ID가있는 링크에 액세스하면 타임 스탬프를 확인하고 파일을 가져 오거나 이에 따라 오류를 표시하십시오.

0

데이터베이스 테이블 :

ID 파일 (공개적으로 액세스 할 수있는 경로 중) 그런 다음 스크립트 얻을-file.php이

만료 ID = XXXXXX

<?not-real-code 
Delete everything expired from table 

Look up record for id=XXXXXXX 

If exists then use something like readfile() to read and output file 

Delete record in table 
0

파일, 타임 스탬프 및 히트를 테이블에 저장하는 데이터베이스를 설치할 수 있습니다. 그런 다음 스크립트에서 타임 스탬프 + 86400 * 일을 확인할 수 있습니다 (86400은 하루에 초 단위입니다). 해당 시간대에 다운로드가 있으면 허용되며 그렇지 않은 경우 다운로드가 허용됩니다. readfile()을 사용하여 다운로드 할 파일을 출력하고 header() 호출을 사용하여 인코딩을 조정할 수 있습니다. 보다 구체적인 도움을 받으려면 코드를 게시해야합니다.

0
  1. 파일이 더 이상 존재하지 않는다는 index.php 파일과 함께 웹 서버에 폴더를 만듭니다.
  2. 필요한 경우 index.php를 가리키는 .htaccess 파일을 만듭니다.
  3. 사람들이 다운로드 할 파일을 웹 서버의 폴더에 추가하십시오.
  4. 링크가있는 이메일을 보내주십시오.
  5. 시간이 다되면 파일을 삭제하면 사람이 index.php로 이동합니다.

참고 :이 외형을 cron 작업으로 자동화해야하는 경우.

관련 문제