나는 이것을 가능한 한 잘 설명하려고 노력할 것입니다. 저는 회원들이 판매 할 파일을 업로드 할 수있는 회원 중심의 웹 사이트를 개발하고 있습니다 (이 파일에 대한 권리를 소유하고있는 곳).htaccess 제한으로 인해 PHP fopen() 및 is_file()이 작동하지 않습니다.
PREMISE 1 : 각 회원의 폴더에 직접 액세스 할 수 없으며 사이트 자체의 링크를 통해서만 접근 할 수 있기를 바랍니다.
이 링크는 구매 한 사람의 회원 영역에서만 생성됩니다 (파일을 두 번 이상 다운로드하는 경우 ... 회원 프로필에서 이러한 폴더에 대한 링크를 허용하지 않음).
회원이 가입 할 때마다 .htaccess가 자동으로 생성되는 파일이 제공됩니다.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.com/.*$ [NC]
RewriteRule .* - [F]
PREMISE 2 : 사용자가 파일을 업로드, 프로세스의 마지막 단계는 파일이 실제로 업로드 있는지 확인하는 것입니다.
$uploadFullPath = 'http://www.domain.com/userfiles/'.$_SESSION['uniqueKey'].'/'.$_SESSION['userNumber'].'-'.$_SESSION['latestUpload'].'.'.$_SESSION['latestExt'];
if(fopen($uploadFullPath,"r")!==0){
// update member usages
$query = "UPDATE memberUsage SET usageLicenses=usageLicenses+1 WHERE memberNumber=".$_SESSION['userNumber'];
mysql_query($query) or die(reportError('Unable to increment licenses used'));
echo 'Your file has been successfully updated. You can view your listing within <a href="/user-area/">Your Dashboard</a>';
}
else{
echo 'There seems to have been a problem uploading your file. Please <a href="/user-area/">go back</a> and try again from your \'incomplete listings\' page. Upload Path Provided: <a href="' . $uploadFullPath .'">' . $uploadFullPath . '</a>';
}
는 명확성을 위해 reportError() 함수는 매번 입력 저장하는 mysql_error를()와 mysql_errno() 오류가보고 필요가있는 시간을 밖으로 괴로워 단지 사전로드 된 기능입니다.
또한 위에서 fopen()을 사용했지만 is_file() 및 file_exists()를 사용하여 파일의 존재 여부를 테스트하려고 시도했습니다. 위의 htaccess로 제한하면 fopen(), is_file()와 file_exists() 모든 생성 된 $ uploadFullPath가 클릭하면 작동에도 불구하고, 파일을 찾기 위해 실패와
문제점 .
그러나 htaccess 제한을 제거하면 위의 기능이 작동하지만 똑같이 파일을 구매하거나 웹 사이트를 먼저 거치지 않고도 직접 액세스 할 수 있습니다.
두 조건을 동시에 실행하려면 어떻게해야합니까? 단지 htaccess인지, 내 파일 탐지 방법인지 아니면 둘의 조합인지 확실하지 않습니다.
미리 도움을 주셔서 감사합니다.
로컬 파일 시스템의 경로 (예 :/var/www/mysite/userfiles/more/stuff/here)를 사용하여 파일을 열 수 없습니까? 그러면 httpd가 실행되지 않고 .htaccess 파일도 실행되지 않습니다. 또는 원격 서버에 파일이 있습니까? – ccKep
우리는 '라이브'웹 사이트에있는 사이트를 말하며 로컬 컴퓨터는 아닙니다. 그게 효과가 있니? –
httpd를 통해 여분의 마일을 사용할 필요가 없으므로 실제로는 http : // - wrapper 대신에 직접 열기가 더 쉽습니다 (자원별로). 파일이있는 경로를 알고 있고 그 파일에 대한 읽기 액세스 권한이있는 경우 직접'file_exists' 및'fopen'을 사용할 수 있습니다. – ccKep