OK, 처음에는 사과드립니다. 이전에 여러 번 다루어 졌던 주제입니다. - 믿어주세요. 이전의 질문과 대답을 모두 읽었지만 여전히 얻을 수 없습니다. 이게 작동합니다.웹 루트 외부의 파일 다운로드
다운로드 할 수있는 파일이있는 폴더가 있습니다. 보안상의 이유로이 파일은 웹 루트 외부에 있습니다. 그러나, 최선의 노력에도 불구하고, 내 PHP 스크립트 파일을 다운로드받을 수 없습니다.
나는 다음과 같이 (간체) 파일 구조가 Plesk를 11
를 사용하여 리눅스 VPS 아파치 서버를 사용하고 있습니다. httpdocs
폴더가 웹 루트입니다. private/uploadedfiles
폴더에서 다운로드 할 위치입니다.
-var
- www
- vhosts
- mydomain.org.uk
- httpdocs (webroot)
- private
- uploadedfiles
나는 downloadscript.php
라는 PHP 스크립트 파일 이름을 전달하는 jQuery를 아약스 호출을 사용하고 있습니다. 이 스크립트는 웹 루트 httpdocs
안에 있습니다. 아약스 호출이 문제없이 작동하고,하지만 난 내 PHP 로그에 다음과 같은 오류 메시지가 받고 있어요
<?php
$filename = $_POST['fbpath'];
$path = '/var/www/vhosts/mydomain.org.uk/private/uploadedfiles/' . $filename;
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($path));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($path));
ob_clean();
flush();
readfile($path);
exit;
?>
:
PHP Warning: readfile(/var/www/vhosts/mydomain.org.uk/private/uploadedfiles/filename.docx): failed to open stream: No such file or directory
내가 확인 한을 두 번 점검하고 다음과 같이 스크립트입니다 트리플 체크하고 파일이 uploadedfiles
폴더 안에 확실히 존재합니다.
나는 또한 open_basedir
제한 문제가 아니라는 것을 확인했습니다. 나는 그렇지 않다고 확신합니다.
내가 누락 된 것이 정말 간단하다는 것이 확실합니다 - 어디에서 잘못 될까요?
추가로, 아직 파일을 업로드하기위한 스크립트를 작성하지 않았습니다. 사전에 알아야 할 사항이 있습니까?
감사합니다.
확인 폴더'uploadedfiles'와 그 내용의 권리는 ... 그것은 웹 서버가 될 수 또는 PHP 때문에 그들에 설정된 권한의 파일에 액세스 할 수 있습니다 ... – RichardBernards
나는 연 모든 권한을 (내 FTP 클라이언트를 통해) 올린다 - 권한 행은 현재'private'과'uploadedfiles' 폴더에'drwxrwxrwx'를, 내부에 저장된 파일에 대해서는'-rwxrwxrwx'를 읽는다. 이게 당신이 의미 한거야? 그렇다면 제대로 작동하지 않는 것 같습니다. 네가 뭔가 다른 것을 의미한다면 나에게 알려줄 수 있니? 감사! – Chris