я предлагаю следующий метод:
Создать .htaccess
файл в защищенной папке изображений, которая перенаправляет все вызовы к индексу с запрашиваемым путем изображения (вы можете использовать относительные пути) в качестве аргумента serve_image
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase/
RewriteRule ^index\.php$ - [L]
RewriteRule (.*) /index.php?serve_image=$1 [L]
</IfModule>
Options All -Indexes
IndexIgnore *
Затем в ваш плагин или functions.php включают проверку доступа, зацепив его на parse_request
действия (это код, который вы использовали бы в вашем serve-image.php
-файла):
add_action('parse_request', 'check_file_access');
// function to check access and serve image
function check_file_access() {
if(!isset($_GET['serve_image')){
return false;
}
// Check access
if(!is_user_logged_in()){
die('Sorry! No access!');
}
// sanitize here (only allow paths that are inside your specified folder)
$image_path = $_GET["serve_image"];
// get content type
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$content_type = finfo_file($finfo, $image_path);
finfo_close($finfo);
// construct file name
$filename = basename($image_path,'.'.$finfo['extension']);
header('Content-type: '.$content_type);
header("Content-Disposition: attachment; filename=".$filename);
readfile($image_path);
exit();
}
Теперь, если вы хотите отобразить одно из защищенных изображений, вы можете просто использовать обычный путь к изображению в атрибуте src
. Источнику изображения будет отказано пользователям, у которых нет доступа.
Какая система вы используете для своего магазина? Чтобы проверить, зарегистрирован ли посетитель или нет, вы можете вызвать 'is_user_logged_in()', который возвращает 'true', если пользователь вошел в систему. У вас уже есть доступ к функциям Wordpress в области вашего' serve-image.php '? – xphan
Я использую WooCommerce. Я ищу способ передать данные изображения в '' по существу, насколько я вижу, единственный способ создать скрипт 'serve-image.php', из которого я должен как-то проверить, является ли пользователь вошел в систему и купил вещь. И у меня нет доступа к WP из внешнего файла. Может быть, использовать какую-то страницу и там короткий код, так что это не вне сферы действия? – iSS