Sorry about the "two-way proxied download" terminology - am not sure how this would be otherwise called (correct terminology is much appreciated). Anyways:
Let's assume I have a PDF file of an article, test.pdf
(see below for Latex example) of which I am an author, which is hosted on a conference website, and otherwise available there for free. Let's say I want to (and am allowed) to also distribute a copy of the same PDF from my website.
So, for the sake of the example, let's say:
- a local PC has a (globally resolvable) IP address 80.80.80.80
- my website server is at
myserver.com
, with IP address 90.90.90.90- The link to the PDF there is
http://myserver.com/dl/test.php?file=./test.pdf
- The link to the PDF there is
- the conference website is at
conference.org
, IP address 100.100.100.100- The link to the PDF there is
http://conference.org/2001/downloads/test.pdf
- The link to the PDF there is
What I want to do is this: when a local PC the PDF file from my website (via http://myserver.com/dl/test.php?file=./test.pdf
), the test.php
script should also:
- initiate a download of
http://conference.org/2001/downloads/test.pdf
, with the original header data of the client (that is,conference.org
should see in their logs that it is 80.80.80.80 which requests), with my website as referrer (that is, 90.90.90.90 would be referrer); the idea of this is that theconference.org
webhost would log the same clients that download asmyserver.com
does - The download from
conference.org
should be terminated after 100 bytes or so, so as not to waste the bandwidth ofconference.org
-- otherwise, it ismyserver.com
that serves the PDF file - Should the download from
conference.org
fail (e.g. ifconference.org
is temporarily offline), than that should be logged in a text file - but it should NOT otherwise interfere (as in, introduce additional delays) in the process of serving the file frommyserver.com
.
Here is an example of test.php
, which only does the serving "from myserver.com
"; otherwise, the relationship between files local to myserver.com
, and their location on conference.org
, is simulated in the $filesRelations
array:
<?php
$filesRelations = array(
'./test.pdf' => 'http://conference.org/2001/downloads/test.pdf',
);
if(!(isset($_GET['file']))) {
echo "<html>
<head/>
<body>
<a href='?file=./test.pdf'>test.pdf</a>
<br/> <sub>(".$filesRelations['./test.pdf'].")</sub>
</body>
</html>
";
} else {
# echo "-- " . $_GET['file'] . " -- "; # dbg
$localpath = $_GET['file'];
$fdname = basename($localpath);
$fsize = filesize($localpath);
$includeFile = file_get_contents($localpath);
if ($includeFile === false)
{
echo "Error with $localpath";
} else {
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=\"".$fdname."\"");
header("Content-length: $fsize");
header("Cache-control: private");
echo $includeFile;
}
}
exit;
?>
How could I modify this code, so that the script "pings" the link (by initiating and terminating a short, 100-byte download) in the respective $filesRelations
entry, using the header data of the calling client, before it serves the headers and the file (by echoing $includeFile
)?
For testing, this is the test.tex
file (which you can compile with pdflatex test.tex
to obtain a test.pdf
):
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\title{Lorem Ipsum}
\author{Author's Name}
\maketitle
\begin{abstract}
\lipsum[1]
\end{abstract}
\section{Introduction}
\lipsum[1-12]
\end{document}
(To test, put test.php
and test.pdf
in one directory, run php-5.4.10 -S localhost:8000
in that directory, then visit http://localhost:8000/test.php
in the web browser).