it-swarm-ko.tech

웹 디렉토리 외부에서 파일 다운로드

다음과 같이 특정 파일이 문서 루트 디렉토리 외부에 저장되는 시나리오가 있습니다.

/home/user/public_html/{drupal files are in here}
/home/user/data/{special data files are in here}

특별한 권한을 가진 사용자가 Drupal의 기본 제공 파일 래퍼를 사용하여/home/user/data에서 파일을 다운로드하도록 허용하고 싶지만 파일에 연결하는 방법을 잘 모르겠습니다.

Addendum : 대부분의 파일은 일반적인 위치에 저장됩니다.

/home/user/public_html/sites/default/files

외부 데이터 폴더에 저장해야하는 것은 그중 일부뿐입니다. 보안상의 이유로 sites/default/files/디렉토리를/home/user/data로 변경하고 싶지 않습니다.

2
Codeblind

Drupal 6은 개인 및 공용 파일을 모두 활성화하는 것을 지원하지 않지만이를 제공하는 일부 모듈이 있습니다 (예 : http://drupal.org/project/private_download ).

해당 모듈이 필요한 작업을 수행하지 않는 경우 직접 작성할 수도 있습니다. 영감을 얻으려면 file_download () 를 참조하세요. 이것은 hook_file_download ()로 액세스를 확인하여 PHP를 통해 개인 파일을 제공하는 페이지 콜백입니다.

3
Berdir

나는 * nix를 잘하지 못하지만 public_html/및 cmod -R 777에서 외부 폴더로이 디렉토리에 대한 심볼릭 링크를 만들어야한다고 생각합니다.

1
dobeerman

나는 보안상의 이유로 항상 이것을한다.

1) 웹 서버의 docroot 외부에 파일을 저장하는 디렉토리를 포함하도록 open_basedir을 구성해야합니다.

2) 해당 사용자 만 액세스 할 수있는 페이지에 다운로드 링크/버튼을 배치하는 것과 같이 해당 사용자가 파일을 가져올 수 있도록하려면 별도의 논리가 필요합니다.

3) 권한이있는 사람이 귀하의 특수 다운로드 링크를 클릭하면 docroot 외부의 원하는 파일에서 file_get_contents ()와 같은 것을 사용하는 논리를 트리거합니다. 이는 원하는 파일의 디렉토리를 알도록 open_basedir을 구성했기 때문입니다

4) 이제 변수에 원하는 파일이 있습니다.이 루틴에 전달하면 사용자의 브라우저에 "파일 저장"대화 상자가 표시됩니다. 파일이 사용자에게 푸시되는 대신 풀링됩니다. 타다!

/***************************************************************************************************
* Prompt the user to download the passed string as a file.
*/
function _Push_download( $output, $filename ) 
{
  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: private");
  header("Content-type: application/octet-stream");
  header("Content-Disposition: attachment; filename=$filename");
  header("Accept-Ranges: bytes");
  echo $output;
  exit;
}
1
Blake Senftner