私が考えた別のアイデアは、ユーザーの IP アドレスをデータベースに保存し、ありがとうページが開いたときにそれを照合することでしたが、ユーザーが大学などの大規模なネットワークの一部である場合、これはうまく機能しません。
各ユーザーのインストーラーに個人名 (binary01、binary02、binary03 など) を付けて送信します。ダウンロード時にインストーラーに独自の名前を読み取らせ、それを GET パラメーターとしてサンキュー ページに挿入しますhttp://www.yoursite.com/thankyou?exe=binary03
。
サーバー上のバイナリ ファイルは常に同じ 1 つのファイルですが、ダウンローダはアフィリエイトごとに異なる名前を報告します (または、同じバイナリの複数のコピーを保持できますが、同期を維持するのはより困難です)。
たとえば、これはダウンロード リンクである可能性があります。
<?php
// Download URL, of the form http://www.yoursite.com/download.php?aff=AffName
// You can rewrite this with Apache's mod_rewrite and have .../filename-AffName.exe
$affiliates = array(
// You can keep these in a database
"widgets" => "Widgets'r'us",
"foobar" => "Foo's Software Bar",
);
$aff = isset($_GET['aff']) ? $_GET['aff'] : 'unaffiliated';
$base = "YourBinary";
$ext = '.exe';
$file = $base.$ext;
$name = $base.'-'.$aff.$ext;
Header("Content-Disposition: attachment; filename=" . urlencode($name));
Header("Content-Type: application/force-download");
Header("Content-Type: application/octet-stream");
Header("Content-Type: application/download");
Header("Content-Description: File Transfer");
Header("Content-Length: " . filesize($file));
readfile($file);
?>
パッケージ名の読み方はインストーラーに依存します。InnoSetup は情報をスクリプト変数としてエクスポートし{srcexe}
、Advanced Installer はそれを [SETUPEXEDIR] として保持します。
ただし、多くのユーザーが (職場やインターネット カフェなどで) インストールをダウンロードし、後でインターネットに接続せずに実行する場合は、これを「最初のインストール登録」機能に上げたいと思うかもしれません。インストール時に "InstallationID" レジストリ値を (実行可能ファイルから読み取って) アフィリエイト名に保存すると、プログラムがそれを検索し、数値 ID または UUID でない場合はそれを交換しようとする場合があります。
このようにして、両方の長所を活用し、顧客を悩ませず (「インターネット接続なしではインストールできません! ええ!」)、掘り出し物で UUID をスローすることさえできます。