アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になっております。
タイトルの表記が的を得ていないかもしれませんので、説明させてください。
現在、PHPでとあるサイトを構築しております。その中で、exeやpdfのファイルをダウンロードできるようなページも作成しております。
PHPはセッション管理のために使用しています。ので、実際には、HTMLの<a href="ファイル名">@@@</a>というHTMLソースをPHPでprintしています。
で、ユーザがマウスクリックをした場合、OSのファイルのダウンロードというダイアログが出て、「開く」または「保存」をクリックすることでダウンロードは可能です。
そこで、ファイルがダウンロードされたときに、ダウンロードされたというログを出力したいのですが、方法がわかりません。現在、それ以外の場所でのログはPHPの関数を用意し、ログ出力しております。
<aタグを使用しているので、JavaScriptで、マウスイベントを取得できるかと思ったのですが・・・。いい方法があれば教えていただきたいと思います。
よろしくお願いします。

A 回答 (3件)

おはようございます。

半分寝ぼけて作りました。
こんな感じではどうでしょうか。
適当なファイル名(*.php)で保存し引数にファイル名を入れて投げてやると
ダウンロードダイアログが出ます。

つまりダウンロードさせたいリンクを
<a href="download.php?abc.exe">・・・</a>という感じにすることで
ヘッダー付きでファイルを出力しログも記録できます。

<?php

$strQuerystring = $_SERVER[QUERY_STRING];
/*何を引数にされるかわかりませんので
正規表現などを使って入力値をチェックすると良いです。
*/
//適当です。
if(!ereg("^[a-zA-Z]*\.exe$",$strQuerystring)) errormsg();

$strPath = "/home/hoge/download/"; //ベースディレクトリ
$strDownload = $strPath.$strQuerystring; //ダウンロードの対象を代入
$strMime = "application/octet-stream"; //Contenttypeはexeだからoctet-stream

//ファイルの存在チェック
$boolFileExists = False; //初期化
if(file_exists("$strDownload")) $boolFileExists = true;
if($boolFileExists){
/* */
/* ここらへんにダウンロードされた場合のログ取得スクリプトを。 */
/* ヘッダ関数の前に文字列を出力されると、エラーになりますので */
/* ログ記録の際にエラーが出ても停止しないように @ を忘れずに */

output($strDownload,$strMime,$strQuerystring);
}else{
errormsg();
}

function output($strDownload,$strMime,$strQuerystring){
//出力用ユーザー関数
header("Content-type: ".$strMime);
header("Content-Disposition: attachment; filename=".$strQuerystring);
header("Content-length: " . filesize($strDownload));
readfile($strDownload);
}

function errormsg(){
//エラーメッセージ出力後exit。
echo "ファイルが見つかりません。";
exit;
}
?>
    • good
    • 0

>「ファイル名を受け取って、それをヘッダとともに出力する」


> というのはどのようにすればよろしいのでしょうか?
言葉の通りですが、具体的に言えば
パスをコードに変換して、必要なヘッダー(content-type等)とともにはき出し、そのファイルを標準出力で書き出す…といった感じです。

この通り後はコーディングすれば上手くダウンロードできると思いますよ。
    • good
    • 0

こんにちは。



現在直接ファイルに対してリンクを貼ってあるものに、一段階サーバ側の
スクリプトをかませるようにしたらいかがでしょうか?

<a href="./fileout.php?file=aaa.pdf">ダウンロード</a>

fileout.phpはファイル名を受け取って、それをヘッダとともに出力するように作れば、
fileout.phpの中の処理で、ダウンロードされたというログを出せると思います。
(リンク集などのランキングと同じ仕組み)

リンクをクリックした時点でサーバに要求は行ってるので、それを受けとれるスクリプトを用意してあげればよいわけです。

この回答への補足

早速の回答ありがとうございます。

「ファイル名を受け取って、それをヘッダとともに出力する」というのはどのようにすればよろしいのでしょうか?

補足日時:2005/11/22 15:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!