PHP - 如果推荐链接匹配,请打开 pdf

PHP - open pdf if referral link is matching

提问人:robinw99 提问时间:11/6/2023 最后编辑:robinw99 更新时间:11/6/2023 访问量:66

问:

我希望我的 php 网站仅在推荐链接符合特定条件时打开一个 pdf 文件。 如果满足条件,我可以下载 pdf,但不能在浏览器中显示 pdf。 不知何故,它重新加载了它或其他东西,导致空引用。

我曾经将pdf重写到php页面,检查引用。.htaccess

RewriteEngine on
RewriteRule ^(.*).(pdf)$ check.php

两者都位于子目录 中。所以 的 url 是 .我要打开的文件位于另一个子目录中。所以。.htaccesscheck.phpsub1/sub2check.phpmydomain.com/sub1/sub2/check.phpsub1/sub2/sub3mydomain.com/sub1/sub2/sub3/file.pdf

我使用以下代码来检查文件路径和引用链接的 URL。check.php

$path = $_SERVER['REQUEST_URI'];
$paths = explode('/', $path);
$lastIndex = count($paths) - 1;
$fileName = $paths[$lastIndex];
$httpReferer = parse_url($_SERVER['HTTP_REFERER']);
foreach ($httpReferer as $key => $value) {
    if (str_starts_with($value, 'www.')) {
        $httpReferer[$key] = ltrim($value,"www.");
    }
}
$referrals = array("website1.com", "website2.com", "website3.com");
$fileDescription = 'funnyFileName';

Array 是包含所有已批准引用的数组。为了检查引用是否匹配以及文件是否存在,我使用以下代码:referrals

if (!empty(array_intersect($httpReferer, $referrals))) {
    $file = '../..'.$path;
    $file = strtok($file, "?");

    if (!file_exists($file)) {
        echo 'error1';
    } else {
        header("Content-type: application/pdf");
        header("Content-Disposition: attachment; filename=$fileDescription.pdf");
        $filesize = filesize($file);
        header("Content-Length: $filesize");
        readfile($file);
    }
} else {
    echo 'error2';
}

如果引用不匹配,则显示,如果文件不存在,则显示 。 如果两者都正确,则下载文件。 pdf 是用 中另一个不相关函数的参数调用的,因此 。error2error1check.php$file = strtok($file, "?");

但是我希望pdf文件显示在浏览器中,而不是立即下载。 我知道如果我替换这个应该有效,但事实并非如此。它会导致 .因此,当内联显示 pdf 时,它会重新加载 (?) 页面,导致空引用并发生。attachmentinlineerror2error2

我尝试使用.如果 I 的推荐匹配,则返回 1,如果不匹配,则返回 0。但是当它到达尝试以内联方式显示文件的点时,它也会返回 0...echo count(array_intersect($httpReferer, $referrals));

php .htaccess

评论

0赞 Adi 11/6/2023
您能否解释一下除了“我知道如果我将附件替换为内联,这应该有效,但事实并非如此”之外,您还尝试或调试了什么?
3赞 KIKO Software 11/6/2023
PDF 是在浏览器中显示、在其他地方显示还是下载,通常是浏览器设置。此设置将覆盖标头。此外,HTTP_REFERER是臭名昭著的不可靠
2赞 KIKO Software 11/6/2023
我认为您需要仔细重做调试,因为这没有意义。
1赞 symcbean 11/6/2023
referer heaer 在 HTTP 中是可选的,因浏览器和版本而异。依靠它来实现强制性功能不是一个好主意。这一点,看看这里的逻辑,让我认为这是 XY 问题。
1赞 KIKO Software 11/6/2023
@KJ 谢谢,但是,我仍然无法在 Chrome 中找到它。不能手动搜索,也不能通过搜索设置来搜索:“附加内容”。然后我用谷歌搜索:“chrome 附加内容”,终于到了某个地方。它隐藏在:“设置”>“隐私和安全”>“网站设置”>“其他内容设置”>“PDF 文档”。我不经常使用Chrome......

答: 暂无答案