2015-10-20 29 views
1

登錄我有一本雜誌的在線服務那些誰買了它提供圖片。我需要在<img src="...">中使用某種serve-image.php?img=page1.jpg,這將從公衆無法訪問的目錄中提取圖像。這部分解決了。沒有想到的是如何從serve-image.php文件中檢查用戶是否登錄到WordPress(併購買了該物品)。我是否必須爲此創建一些簡單的API?有沒有我沒有想到的東西?PHP - WordPress的 - 如果客戶在

感謝您的任何答案!

+0

你用什麼系統爲你的店鋪?要檢查訪問者是否登錄,可以調用'is_user_logged_in()',如果用戶登錄,它將返回'true'。您是否已經有權訪問'serve-image.php範圍內的Wordpress功能'? – xphan

+0

我使用WooCommerce。我在尋找一種方式將圖像數據傳遞到''本質,就我所看到的,唯一的方法是創建'服務,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 -file已經使用的代碼):

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