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"),

И то, и другое вернет истину.

Вы должны убедиться, что у вас есть права на чтение в папке / файлах, что, вероятно, у вас уже есть.

Другие вопросы по тегам