2015-10-20 1 views
1

У меня есть журнал, который будет обслуживать онлайн тех, кто его купил. Мне нужен какой-то serve-image.php?img=page1.jpg для использования в <img src="...">, который вытаскивал бы изображения из каталога, недоступного для публики. Эта часть решена. Что не выяснено, как я могу проверить этот файл serve-image.php, если пользователь зарегистрирован в WordPress (и купил вещь.) Должен ли я создать для этого простой API? Есть ли что-то, о чем я не думаю?php - WordPress - обслуживающие изображения, если клиент зарегистрирован

Благодарим за любые ответы!

+0

Какая система вы используете для своего магазина? Чтобы проверить, зарегистрирован ли посетитель или нет, вы можете вызвать 'is_user_logged_in()', который возвращает 'true', если пользователь вошел в систему. У вас уже есть доступ к функциям Wordpress в области вашего' serve-image.php '? – xphan

+0

Я использую WooCommerce. Я ищу способ передать данные изображения в '' по существу, насколько я вижу, единственный способ создать скрипт 'serve-image.php', из которого я должен как-то проверить, является ли пользователь вошел в систему и купил вещь. И у меня нет доступа к WP из внешнего файла. Может быть, использовать какую-то страницу и там короткий код, так что это не вне сферы действия? – iSS

ответ

1

я предлагаю следующий метод:

Создать .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. Источнику изображения будет отказано пользователям, у которых нет доступа.

+0

Я думаю, что теперь уместно использовать какое-то профановское слово, чтобы объяснить, насколько хорошо ваш ответ! Спасибо! Все это время я думал не в том направлении! Благодаря! – iSS

+0

Добро пожаловать. Недавно я пытался сделать что-то знакомое и нашел, что это самое простое решение отделить контроль доступа от URL-адреса. – xphan