在服务器上访问文件(例如,PDF)的次数

时间:2012-03-30 10:57:10

标签: html web

我有一个小网站,有几个PDF可供免费下载。我使用StatCounter来观察页面加载的数量。它还显示了我的PDF下载数量,但它仅考虑用户点击我网站链接的下载量。但是对PDF的“外部”访问是什么(例如,直接来自Google搜索)?我怎么算这些?是否有可能使用StatCounter等工具?

感谢。

4 个答案:

答案 0 :(得分:1)

您可以使用log analyzer来检查文件的访问次数。如果他们提供访问日志和日志分析器软件的访问权,请询问托管服务提供商。

答案 1 :(得分:1)

在php中,它会像(未经测试):

$db = mysql_connect(...);
$file = $_GET['file'];
$allowed_files = {...}; // or check in database
if (in_array($file, $allowed_files) && file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    mysql_query('UPDATE files SET count = count + 1 WHERE file="' . $file . '"')

    readfile($file);
    exit;
} else {
    /* issue a 404, or redirect to a not-found page */
}

答案 2 :(得分:1)

.htaccess(重定向* .pdf请求下载.php):

RewriteEngine On
RewriteRule \.pdf$ /download.php

的download.php:

<?php
$url = $_SERVER['REQUEST_URI'];
if (!preg_match('/([a-z0-9_-]+)\.pdf$/', $url, $r) || !file_exists($r[1] . '.pdf')) {
    header('HTTP/1.0 404 Not Found');
    echo "File not found.";
    exit(0);
}

$filename = $r[1] . '.pdf';
// [do you statistics here] 
header('Content-type: application/pdf');
header("Content-Disposition: attachment; filename=\"$filename\"");
readfile($filename);
?>

答案 3 :(得分:0)

您必须创建一种从服务器捕获请求的方法。

如果您使用的是php,最好的方法是使用mod_rewrite。 如果你使用.net,一个HttpHandler。

您必须处理请求,调用statcounter,然后将pdf内容发送给用户。