2012-04-14 82 views
0

我在服务器上有一个文件,例如“file.txt”。它可能需要从不同的领域。跟踪文件请求引用者

是否有任何方法可以跟踪这个文件被请求并保存在某个地方?

谢谢。

+1

你是什么意思“从不同的域请求”是什么意思? – 2012-04-14 20:43:56

+0

[你有什么试过](http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – ghoti 2012-04-15 22:15:31

回答

1

我不认为域名将是你最好的选择。我会建议你坚持IP address for限制

您还可以使用$_SERVER ['HTTP_REFERER']验证确切的脚本中调用您的文件或即将加载文件

尝试

$allowedReferer = array (
     "http://me.test.com/xxx/bbb/zmy.php?", 
     "https://me.why.com/xxx/bbb/zmy.axpx" , 
     "http://localhost/lab/stockoverflow/" 
); 

$allowedIP = array (
     "192.168.0.1", 
     "192.168.0.1" , 
     "::1" 
); 

$file = "file.pdf"; // its can also be a value form $_GET 

if (! in_array (quickIP(), $allowedIP)) { 
    die ("IP LockDown : " . quickIP()); 
} 

if (! isset ($_SERVER ['HTTP_REFERER'])) { 
    die ("Missing Referer"); 
} 

if (! in_array ($_SERVER ['HTTP_REFERER'] , $allowedReferer)) { 
    die ("Referer Lockdown " . $_SERVER ['HTTP_REFERER']); 
} 

$array = parse_url ($_SERVER ['HTTP_REFERER']); 

header ('Content-type: application/pdf'); 
header ('Content-Disposition: attachment; filename="' . $file . '"'); 
readfile ($file); 

function quickIP() { 
    return (empty ($_SERVER ['HTTP_CLIENT_IP']) ? (empty ($_SERVER ['HTTP_X_FORWARDED_FOR']) ? $_SERVER ['REMOTE_ADDR'] : $_SERVER ['HTTP_X_FORWARDED_FOR']) : $_SERVER ['HTTP_CLIENT_IP']); 
} 
1

是的,只需得到引用者并存储它。变量是$ _SERVER ['HTTP_REFERER']

您有两种选择。您可以编写一个服务于该文件的PHP脚本(http://teddy.fr/blog/how-serve-big-files-through-php)并存储使用PHP的引用程序。

或者,Web服务器保留所有访问文件的日志。您可以扫描此(结构化)日志以访问您的文件,并将查阅者导出。有几个日志分析项目,如AWStats。

+0

这是一个脚本:http://www.gidforums.com/t-497.html – j13r 2012-04-14 20:53:32