2013-05-21 3 views
-1

사용자가 자바 스크립트 플러그인을 통해 파일을 볼 수있는 사이트를 만들고 있습니다.PHP 복사 CPU 사용량

이 작업을 수행하고 파일의 보안을 유지하려면 JavaScript 플러그인에 액세스 할 때마다 원본 파일을 한 번만 복사하면됩니다.

원본 파일의 최대 크기는 30MB이며 시스템의 여러 사용자가이 파일을 어떻게 확장합니까? 100 명이 파일 사본을 만들고 액세스 할 수 있다고 가정 해보십시오.

+3

쓰기 액세스를 사용하지 않는 한 원본 파일을 사용하는 것이 안전하지 않은 경우를 상상할 수 없습니까? – bwoebi

+0

@bwoebi OP가 언급하는 것은 음악/사운드를 제공하는 서비스를 만드는 시나리오에서 유용 할 수 있지만 URL에 MP3를 복사하여 복사 한 다음 MP3를 제공하도록 할 수는 없습니다 또는 MP3 파일에 대한 링크를 공유). – h2ooooooo

+0

@ h2ooooooo mod_rewrite를 디스크의 다른 데이터에 액세스 할 수있는 중앙 PHP 파일에 추가 하시겠습니까? – bwoebi

답변

1

당신은 PHP 스크립트에 사용자를 참조하기 위해 htaccess로 재 작성을 작성하여이 작업을 수행 할 수 있습니다

RewriteEngine On 
RewriteRule ^download/([^/]+) /lib/download.php?file=$1 [QSA] 

lib/download.phpyourdomain.com/download/anyfilehere.mp3?one_time_token=ABCDEFG 모든 요청을 전달하고 $_GET['file']anyfilehere.mp3로 설정됩니다. one_time_token$_GET 매개 변수는 [QSA]을 사용 했으므로 전달됩니다.

download.php 단순히 같은 것을 볼 수 있었다 :

<?php 
    if (!empty($_GET['file'])) { 
     if (!empty($_GET['one_time_token'])) { 
      if (TokenOK($_GET['one_time_token'])) { //Create a function called TokenOK where you look up the download token in eg. a database 
       $fileName = '/var/www/downloadfolder/' . $_GET['file']; 
       if (file_exists($fileName)) { 
        ExpireToken($_GET['one_time_token']); //Create a function called ExpireToken where you expire the token in eg. the database 
        readfile($fileName); //Read the file to the user 
        die(); 
       } else { 
        die('Error: file not found'); 
       } 
      } else { 
       die('Error: token is not OK'); 
      } 
     } else { 
      die('Error: token is not specified'); 
     } 
    } else { 
     die('Error: file is not specified'); 
    } 
?> 
고려해야 할 :

  • 출력
  • 읽기 this PHP manual entry on readfile 파일의 내용 유형을 지정하는 MIME 헤더 형식을
  • 한 시간 토큰이 cert에서만 유효하도록 제한하십시오. 대신 허용하는 아인 기간 (그리고 이것의 사용자에게 통지), 그것은 다운로드 할 번만
  • 사용자 다운로드를 취소, 따라서 다시 다운로드 할 수없는 경우 시스템이 어떻게 반응할지는?
  • 다운로드가 실패하면 어떻게해야합니까? 새로운 다운로드 링크를 요청해야합니까?
  • 는 스트리밍 MP3 파일의 경우, 확인이 (MP3 파일을 스트리밍 한 곳이 가장 가능성이 당신이 MP3 파일에 대한 새 요청을 만들 겠지만, 외부 추구하지 않을 경우)
작품을 추구
+0

토큰은 어떻게 구현합니까? 거기 PHP는 특정 기능이 있습니까? – James

+1

@James 임의의 ID를 생성하여 데이터베이스에 저장하는 것은 어렵지 않습니다 (필요한 경우 'uniqid'사용). 그러면 해당 ID를 사용자에게 보내 링크로 사용하십시오. 데이터베이스는'id | 토큰 | ip | 유효한'또는'id | 토큰 | ip | valid_until'을 사용합니다. IP는 선택 사항이지만 한 사용자가 동일한 파일을 수십억 번 다운로드하면 볼 수 있으므로 좋을 수도 있습니다. – h2ooooooo

+0

대단히 감사합니다, 많이 hahaha 사랑 :) – James