2014-03-31 161 views
0

我有一個joomla網站。並有一些pdf文件到網站的根目錄。阻止訪客用戶直接訪問PDF鏈接

有沒有一種方法可以保護直接訪問的客人(公共)用戶的PDF文件?並允許註冊用戶?

我試過htaccess(拒絕),但註冊用戶也無法直接查看pdf .. 已搜索但沒有發現任何關於此..請有人幫忙。

謝謝

+1

您無法檢測到用戶已登錄或沒有使用htaccess文件,它將需要PHP。首先編寫腳本來檢測用戶是否已登錄,在根目錄中獲取PDF文件陣列,檢測文件名是否在URL中,然後進行相應的重定向。這些任務中的每一個都可以通過簡單的Google搜索找到。如果遇到特定的編碼問題,請發佈另一個問題。 – Lodder

回答

0

在.htacess文件,你必須添加以下代碼

所有

否認它應該在PDF文件所在的文件夾發票下進行定位。

如果您使用全部拒絕,那麼文件不具有htacess文件所在的特定目錄的下載訪問權限。

要允許註冊用戶下載訪問,必須調用以下控制器而不是直接文件路徑url。

URL例如: - www.example.com/index.php?option=com_temp &任務= temp.downloadmypdf &文件=文件名

public function downloadmypdf(){ 

    $user = JFactory::getUser(); 
    $getfile = JRequest::getVar('file'); 

    if($user->get('id') == 0){ 
     die('permission denied'); 
    } 

    $link = "/invoice/".$getfile.".pdf"; 
    $file = JPATH_SITE.$link; 

    header("Content-Type: application/octet-stream"); 

    $filename = $getfile.'.pdf'; 

    header("Content-Disposition: attachment; filename=".urlencode($filename)); 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 
    header("Content-Description: File Transfer"); 
    header("Content-Length: " . filesize($file)); 
    flush(); // this doesn't really matter. 

    $fp = fopen($file, "r"); 

    while (!feof($fp)) 
    { 
     echo fread($fp, 65536); 
     flush(); // this is essential for large downloads 
    } 
    fclose($fp); 

    JFactory::getApplication()->close(); 
} 

現金去Ashli​​n rejo。

+0

謝謝。你能告訴我在哪裏可以添加這個功能嗎?在模板的index.php中? –

+0

您能否告訴我如何通過手動添加pdf文件或者您是否使用任何組件來保存文件。 – Selvaraj

+0

不,這個pdf是在「root/files /」文件夾中手動添加的。 –

1

創建一個名爲的download.php

文件中添加以下代碼的download.php文件用PHP標籤封裝

define('_JEXEC', 1); 
define('DS', DIRECTORY_SEPARATOR); 

if (file_exists(dirname(__FILE__) . '/defines.php')) { 
    include_once dirname(__FILE__) . '/defines.php'; 
} 

if (!defined('_JDEFINES')) { 
    define('JPATH_BASE', dirname(__FILE__)); 
    require_once JPATH_BASE.'/includes/defines.php'; 
} 

require_once JPATH_BASE.'/includes/framework.php'; 

// Mark afterLoad in the profiler. 
JDEBUG ? $_PROFILER->mark('afterLoad') : null; 

// Instantiate the application. 
$app = JFactory::getApplication('site'); 

// Initialise the application. 
$app->initialise(); 

$user = JFactory::getUser(); 
$getfile = JRequest::getVar('file',null,'get','string'); 

if($getfile){ 

    if($user->get('id') == 0){ 
     die('permission denied'); 
    } 


    $link = "/files/".$getfile.".pdf"; // Locate the pdf file 
    $file = JPATH_SITE.$link; 

    header("Content-Type: application/octet-stream"); 

    $filename = $getfile.'.pdf'; 

    header("Content-Disposition: attachment; filename=".urlencode($filename)); 
    header("Content-Type: application/force-download"); 
    header("Content-Type: application/octet-stream"); 
    header("Content-Type: application/download"); 
    header("Content-Description: File Transfer"); 
    header("Content-Length: " . filesize($file)); 
    flush(); // this doesn't really matter. 

    $fp = fopen($file, "r"); 

    while (!feof($fp)) 
    { 
     echo fread($fp, 65536); 
     flush(); // this is essential for large downloads 
    } 
    fclose($fp); 
} 

$app->close(); 

URL例如: - www.example.com/download.php?file = filename

並確保您已根據需要更改$ link變量。

+0

這只是幫了我很大的忙,謝謝!即使與Joomla 1.5一起工作。不要忘記在.htacess文件中添加拒絕規則。 –