Настройка подтверждения пользователя с помощью auto_prepend Joomla

Застрял на чем-то. Я добавил подтверждение для каждого запроса в PDF-файлы в определенной папке. Я использую .htaccess с prepend.php. Это на сайте Joomla.

Цель состоит в том, чтобы позволить подписанному участнику видеть различные PDF-файлы в папке, но отклонить неподписанного и посетителя.

.Htaccess

# set .pdf extension to be PHP
AddType php5-script .pdf

# match the .pdf extension
<FilesMatch "\.pdf$">
# set the prepend file setting
php_value auto_prepend_file "prepend.php"</FilesMatch>

prepend.php

<?php

// Loading Joomla User core Files
define( '_JEXEC', 1 );
define('JPATH_BASE', '../');
require_once ( '../includes/defines.php' );
require_once ( '../includes/framework.php' );

// Create the Application
$app = JFactory::getApplication('site');

// Error Message : Please Log-in
$error = 'Veuillez vous connecter.';

// Check wether Joomla User is logged-in
$user = JFactory::getUser();

// Define user id
$ClientUserId = $user->id;

// Connect to databases
$link = mysqli_connect("localhost", "dbuser", "dbpsw", "dbname");

// Search for Account type
if($ClientUserId != 0) {
$resultabo = mysqli_query($link, "SELECT * FROM tablename WHERE user_id='$ClientUserId' ORDER BY id DESC LIMIT 1");
} else die($error);

// Controling wether the user is logged-in in a subscribed account
while($row = $resultabo->fetch_assoc()) {

$abo = $row["account_id"];

if($abo > 1 AND $abo < 7 ) {

// Note : All $abo between 6 and 7 are "subscribed"
// Sending headers to subscribed user
header("Content-Disposition", "inline; filename=myfilename.pdf");
header('Content-type: application/pdf');
readfile($_SERVER['SCRIPT_FILENAME']); // serve the requested file
exit(0);

} elseif ($abo == 1) {

// Note : 1 is a registered member but not subscribed

// echo message : Your account is not subscribed to our website, please go on WebsiteName to subscribe.
echo "";

} else {

// echo message : You encountered an error during your request. Please reload the page or log-in once again.
echo '';

}

}

// If nothing is triggered, die.
die()

?>

<!DOCTYPE html>
<html>
<body style="background-color: white;">
</body>
</html>

Проблема в том, что файл Prepend не читается первым, поэтому я застрял с этим.
Вторая проблема: я помню, что нашел способ прочитать файл prepend.php, но проверка не сработала.

Единственный способ, которым я мог получить эту работу, был на моем местном веб-сайте и с другим кодом:

.htaccess (местный)

# Adding PDF compatibility to check
AddHandler php5-script .pdf
AddType application/x-httpd-php .html .htm

#Path of the directory where are stored the PDFs
php_value include_path "./journal/"
#Check wether or not user is logged-in & show pdf if logged-in
php_value auto_prepend_file "prepend.php"

prepend.php (локальный)

<?php

/* Loading Joomla User core Files */
define( '_JEXEC', 1 );
define('JPATH_BASE', '../');
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );

/* Create the Application */
$app = JFactory::getApplication('site');

$error = "Une erreur est survenue";

/* Check wether Joomla User is logged-in */
$user = JFactory::getUser();

/* Define user id */
$ClientUserId = $user->id;

/* Connect to databases */
$link = mysqli_connect("localhost", "root", "", "dbname");

/* Search for Account type */
$resultabo = mysqli_query($link, "SELECT * FROM tablename WHERE user_id='$ClientUserId' ORDER BY id DESC LIMIT 1");

while($row = $resultabo->fetch_assoc()) {

$abo = $row["account_id"];

$error = "Une erreur s'est produite. Veuillez rafraîchir la page.";

if ($abo == 1) die();

else if($abo == 2) {

header("Content-Disposition", "inline; filename=myfilename.myextension");
header('Content-type: application/pdf');
readfile($_SERVER['SCRIPT_FILENAME']); // serve the requested file
exit(0);

}

else die();

}

die();

/* Old Method */
#if ($user->guest) die();
#else {
#   }

/* Sending back pdf */?>

<html><body bgcolor="#FFFFFF"></body></html>

Спасибо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]