Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只能由登录的Joomla用户访问的PDF文件_Php_.htaccess_Pdf_Joomla - Fatal编程技术网

Php 只能由登录的Joomla用户访问的PDF文件

Php 只能由登录的Joomla用户访问的PDF文件,php,.htaccess,pdf,joomla,Php,.htaccess,Pdf,Joomla,我已经搜索了几个小时了,现在是时候问你是否有解决方案了 我试图让只有登录Joomla的用户才能在目录中查看和下载我的PDF 为此,我创建了一个.htaccess: # Adding PDF compatibility for the control AddHandler php5-script .pdf php_value auto_prepend_file "prepend.php" # Check wether or not user is logged-in php_value incl

我已经搜索了几个小时了,现在是时候问你是否有解决方案了

我试图让只有登录Joomla的用户才能在目录中查看和下载我的PDF

为此,我创建了一个.htaccess:

# Adding PDF compatibility for the control
AddHandler php5-script .pdf
php_value auto_prepend_file "prepend.php"

# Check wether or not user is logged-in
php_value include_path "./journal/"
php_value auto_prepend_file "download.php"
我还创建了一个名为“download.php”的文件,以检查Joomla用户是否登录:

<?php
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');

$user = &JFactory::getUser();
if ($user->guest) die();
else {

}
?>

最后一个文件:prepend.php

<?php

header('Content-type: application/pdf');
readfile($_SERVER['SCRIPT_FILENAME']); // serve the requested file
exit(0);

?>
<?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');

/* Check wether Joomla User is logged-in */
$user = &JFactory::getUser();
if ($user->guest) die();
else {

}

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

?>

问题是,当我试图访问其中一个pdf时,我得到了它的纯文本版本。这是第一行。。。之后很久

%PDF-1.6 %âãÏÓ 1983 0 obj <>stream hÞì[MoGý+uLÖYŸ‚Fc^†e ÇXŒ¥Ž<°4­ùß/ÉjN„8Y U ìE>oº«Y$«ºÛôà¼ôè DÁ%O2—ß*…¯d¾R}rÙWÙ¡ÏYPq ת ƒ bT#ð.d,‚€Q@JAÁ…*v+DFUg$( 3d½ZcG¢Ï^Pu‚Πѳ¿=£*6\Il ºAƱC1faÆèb z7¹˜A<@¶‘«øÌNÆ’± Y #¶Q•ÃIùØñHÊÇn$¯+±"|!º(^…ĨˆW!;‹x8 ¨ÖBåбÁ¥PÅFô.Å(6"0"±Á?SŠb#J¼Øˆl#'±ÙFAa‰l£Žcµˆ5ž–¨ñ§ dFò’@™‘ÀeH2#¡ËÍ?^~š¦Ï¡èN9PPv9ézSaD:£ºœ³Î`%ÈNTnñËl£Å‡ä¿Ì6Zürt¥Å–?.©Òâ—#_®®4ÿ¸KðrX‚VO+1*BWˆ]®×’´"x %«\Ž\Çz—mHé1bU«¸° Ç6¨ˆ§Õ;.Nñ´#nEÇ*žr¹ÊôZdTõZrœwaæsî„ÝàX‹µ2"GŽÍÊ]"{&×ø[”•Û3b¤s‰mPf.òºJÊŒKq\ñ™$På9B©òÞQÊáyŒ$«ÄIæÒ(‚‚£ÄCEFâ=±Ì)K™Ÿ‘Ä8ìT$ƒÄ’¤Rõ.Ûtƒ8I$Ù'–Q»2Øû,†%ÚX£@)xb©ƒÇ(eAIb±ƒI§1^§‘@õ„õ> %±àŠRH–ïsÃÒƒ|‘’”’—ÞÃP¬I Š5*:€ÿây².I&ÿ‘…IæH¬IáV =‚Ô.I‚¨áeñ$¹§à¶)&d­5JRtÜY%LA¬Isb(Ö¤Š5=èXº/q`(ÝBEŒ ’h!ªµ(Í:ht¸0,:9¦:' *‚ÄSLº n€,U†I¬Fo¬Z%I¬IU3k”uÿfc² ñ4€šFÐë€"PÓ-m%I/IÆ‚ö7’B QŠ˜d§X¦IèYÉÂ+·‚tãï¾Û¼|Òݽ{+¶JÜÜÀùPÀ suÙË®¥@v-b€Á‡Í›íaÚߦ©mw|ñѵ×ÓÃñåôÅÑæí|=½ÚÞ¶ÍQ½ûr;m·ûùvžßÏÞ>ßïçãö¸›÷›óéâ¸y~8î~Ý2Ð_?|ÚûOÓtƒÇÍ»íÕa{³y±»º?Lòóz¾ztÿ§ý%3O›×ò×67‘àßïücÚ^Úî¯wûéüÓV\•¯¶‡ùç›íÕlê·†ü â …Š'”N(ŸP9¡zB¤èüzw95{ï8žç‡æÌÏóáóÇyþ¼ùq¾¸¿áˆë•ß½Óp¾¾¿¹{_ÛáB¦ßH@Óp¾”ŽŸ®§›?Vÿt×—ìQKT´îghÀÊ ¢dÀ­å¼²cFcFcFcFcFcFcFcFcFcFcÆŒ9s0æ`̦$9,À˜ƒ1cŽÆ9s4f¢J`Ìј£1GcNÆœŒ9s2ædÌɘ“1'cNÆœŒ9s6ælÌÙ˜³1gcÎÆœ9s6æbÌŘ‹1ŸZN1æbÌŘ‹1c.Æ\¹³õ99n,À˜«1Wc®Æ\¹3333333333-ÌrºX@Á@4`ؤG¾¨ŒÙ4H¦A2 ’iLƒd$Ó ™É4H¦A2 ’iLƒd$Ó ™É4H¦A2 ’iLƒd$Ó ™É4H¦A2 ’iLƒd$Ó ™É4H¦A2 ’iLƒd$Ó ™É4H¦A2 ’iLƒd$Ó ™É4H¦A2 ’iš?<îÒo®ä´Vulú‹ŽíuÞ²ÿqÞ×sž:üS‡êðOþ©Ãÿ:|;bÿ½†­s°cNè˜ÿöœç×ÇoÎåAå,„o™!ý†åyî¯hŽü<¶û¸uÓ³»ãýån>‹) eî§\L‡ùÁ]^Ü–v”Í]ðöz>§ƒÒ7AR‘ç&ø(YÔ’UÖ!kA¯Ý™ï)ØÒs,,=Ç‚G(ðº–îGÓÒ÷eº8l÷ÿ¾ÛÞÜÝï¯ÔƒÔíÁÈ2jÕ–B{¸›¿MÏ~=Ìû£r l»ÿÚM{wùe¿½Ùýç~:C=Z0h˨~-BeƒÕ܃¤ŽÚ½1מ¹öl̵gc®=síÙ˜kÏÆ\{úùõ¡×“3uoÊ„CÖõœLݽâPçmÖ»ûõTõTu½y'1µ—ÂÃÏÛ;\?üÔ€¾½ÅõÝí |Ùª–÷äq<$ИRÿBzj‡tͪ]³zš€ïš]³úz×÷ÌöBÂz»pn…q•Ó7š‡ýÕyH!,ˆÊz4XBUWüè„Ðz_ÿG @¿JÀ°e×;á!¶€!®HÙº†)Û7+Œ+R¶âô"e«xä~5_N7gKK½Õ®zѧž=<€ûå›^üòmó£¿îÃð["lH ߉¡3éò5<¿$Çö Äq¦V»!3µ’ yœiù¤Þ_´¡®Ò$ãR0´âcäø \Ό㟀pùŒû¿1¬ïVBqÅÞ¼<"Ä{s{¯#ß„¾¢¤F9üyS+ÙXûsÙuºNCï Ú¿Ž‚ñÏ?˜Z õ‚´N-§V%iÅZNµQvŸ¶?|ý¿gÀ=ö¿*ôo, endstream endobj 1984 0 obj <>stream hÞŒË1 €0ЫäéoSmAÜÜ‹õ"ÅEADoov:äÿ^`!8´ä"Aœ§6hKмˆF£t‰žºŽÁèÛșӼðô…óuÞË5leïû?f똫cRÇ|k¾ì`TÔN> endstream endobj 1985 0 obj <>stream hÞŒ“KOƒ@€ç§ÌQÊ.°<’¦IcÓ“QR=øˆ´›º ²»4õ'û'ÔÙbÒ‡¹,³0û}Ìpž¤Èó”a»+G.„|ôƒÄAê‚Ã6(ÂÐFí©c±Å$˜ˆmNŠ©»ã3Z¼™Òƶ.†sï:w;—àv÷µôn[¨Ršñ˜Ò¯ª¦´xÁ™7•Æ>—MQxO”„ÙËŽÇ;xY®eéžn$¾²…<[¹1U‰Zš¼Ù\®Íâ|ë:a¸‘Ûöâù[@‹œ*cµzm¬"îd±Rå dЉ̴\ï*êPBM/od·DÐlö$a¯Ä?%1R¯e£Í ‡èu{Ž¯o˜Ã'CXÀ ”ƒDQ¯(<e IUÓ*Iè”|Ð`â^ø_ãÒ$½šèPsoðN¢5)®(ª¡ Ôº´WïÉfU£KEß×áø9‹Û¬ŽZþüqGødŸåK‰ioƒNaÒcgÄù`D„N

%PDF-1.6%1983 0 obj stream hÞ236[MoGýý+uLýYŸFc†eƄXŒo«Y$Y«ÛÛýD«o»2-R»D»R»W»7ypq»D»Q@JAÁ…*v+DFUg$(3d½ZcG ^ PuÎñ³=*6¦Il:AƱC1faÆb z7ñA在PHP代码中尝试以下方法:

<?php
header('Content-disposition: attachment; filename=filename.pdf');
header('Content-type: application/pdf');
readfile($_SERVER['SCRIPT_FILENAME']); // serve the requested file
exit(0);

您需要在响应中添加其他标题-有关完整列表,请参阅


具体来说,
Content-Disposition
将强制保存对话框-

好,所以我最终实现了这个功能。正如Marc B也提到的,我的标题被忽略了。我猜双
php\u值自动预结束\u文件
工作不好,第一个“prepend.php”被忽略。所以我只是复制粘贴代码,并将所有内容保存在一个文件中,添加了标题
Conten Disposition

以下是工作代码:

.htaccess

# Adding PDF compatibility to check 
AddHandler php5-script .pdf

#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

header('Content-type: application/pdf');
readfile($_SERVER['SCRIPT_FILENAME']); // serve the requested file
exit(0);

?>
<?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');

/* Check wether Joomla User is logged-in */
$user = &JFactory::getUser();
if ($user->guest) die();
else {

}

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

?>


您可能已经发送了一个
标题
问题,并且您的应用程序/pdf标题被忽略/跳过。有几个第三方组件您尝试过其中任何一个吗?您可以在中找到很多。我找到的唯一组件是“pdf嵌入”但它并没有达到我想要的效果。我希望将来,管理网站的人只需传输目录中的文件,就可以立即下载给用户。我想这是我唯一的解决方案。看起来它没有做任何更改,我应该在哪里插入标题集内容配置附件?它给了我一个错误。我想我把标题集内容处置附件放错了位置。我应该用AddHandler php5 script.pdf替换它吗?我想不需要替换。它给了我一个内部服务器错误。我尝试了所有可能的方法,但似乎都不起作用。我试图添加内容处置,但它失败了oesn没有更改我得到的普通pdf,我尝试添加整个内容-…在您的示例中,它似乎没有更改。我开始认为它被完全忽略了。