PHP fopen() и is_file() не работают из-за ограничений htaccess
Я постараюсь объяснить это так хорошо, как только могу. Я разрабатываю сайт, управляемый участниками, где участники могут загружать файлы, чтобы продавать их (где они владеют правами на эти файлы).
ПОЛОЖЕНИЕ 1: Я хотел убедиться, что к папке каждого участника нельзя было получить прямой доступ, и к ней можно было получить доступ только по ссылке с самого сайта.
Эта ссылка создается только в личном кабинете пользователя, который его купил (для загрузки файла более одного раза... и профили участников также не позволяют ссылаться на эти папки).
Поэтому каждый раз, когда член присоединяется, ему дается файл, в который автоматически создается.htaccess.
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.com/.*$ [NC]
RewriteRule .* - [F]
ПОДАЧА 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, просто мой метод обнаружения файлов или их комбинация.
Заранее благодарю за помощь!
1 ответ
Если возможно, просто используйте вашу локальную файловую систему вместо http://
-wrapper.
Так, например, если ваш файл PHP /var/www/kirby/myfile.php
и ваши загрузки хранятся в (опять же, пример) /var/www/kirby/useruploads/cooluserone/test.jpg
(при условии test.jpg в качестве загруженного файла).
В этом случае вы можете использовать относительный путь file_exists("useruploads/cooluserone/test.jpg")
или полный путь file_exists("/var/www/kirby/useruploads/cooluserone/test.jpg")
,
И то, и другое вернет истину.
Вы должны убедиться, что у вас есть права на чтение в папке / файлах, что, вероятно, у вас уже есть.