PDF 文件不会在带有标题的浏览器中打开


PDF file won't open in browser with headers

经过许多帖子,我成功地创建了htaccess和验证文件,以通过URL处理PDF调用。

问题是,脚本不输出PDF文件。它在Firefox中读作"PDF文档可能无法正确显示",在Chrome中没有错误,它只是不做任何事情。

知道为什么吗?

谢谢

注意:文件夹中存在 PDF 文件。我可以在禁用htaccess后直接打开它们。

验证.php

session_start();
//If user not logged in or URL not set then redirect to login page
if (! isset($_SESSION['user']) || ! isset($_GET['request_url']))
{
    session_write_close();
    header ('Location: /login.php');
    exit();
}
//Otherwise
else
{
    //Get request URL from htaccess
    $request_url = $_GET['request_url'];
    //Get file name only
    $filename = basename($request_url);
    //Set headers
    header('Content-type: application/pdf');
    header('Content-Disposition: inline; filename="' . $filename . '"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($request_url));
    header('Accept-Ranges: bytes');
    //Output file content
    @readfile($request_url);
    //Take the log
    $file = 'log.txt';
    $log  = file_get_contents($file);
    $log .= 'URL:' . $request_url . ' - FILE:' . $filename . ' - TIMESTAMP:' . date('d/m/Y H:i:s') . "'n";
    @file_put_contents($file, $log);
}

HTACCESS:

RewriteEngine On
RewriteCond %{REQUEST_URI} '.(pdf)$ [NC]
RewriteRule ^ /validate.php?request_url=%{REQUEST_URI} [L]

从此行中删除@

@readfile($request_url);

看看你得到什么错误。

file_put_contents()具有可选的FILE_APPEND标志,则不必读取日志的内容

$file = 'log.txt';
$log = 'URL:' . $request_url . ' - FILE:' . $filename . ' - TIMESTAMP:' . date('d/m/Y H:i:s') . "'n";
@file_put_contents($file, $log, FILE_APPEND);

用绝对路径求解。

取代

@readfile($request_url);

@readfile($_SERVER['DOCUMENT_ROOT'] . $request_url);