
いつもお世話になっております。
タイトルの表記が的を得ていないかもしれませんので、説明させてください。
現在、PHPでとあるサイトを構築しております。その中で、exeやpdfのファイルをダウンロードできるようなページも作成しております。
PHPはセッション管理のために使用しています。ので、実際には、HTMLの<a href="ファイル名">@@@</a>というHTMLソースをPHPでprintしています。
で、ユーザがマウスクリックをした場合、OSのファイルのダウンロードというダイアログが出て、「開く」または「保存」をクリックすることでダウンロードは可能です。
そこで、ファイルがダウンロードされたときに、ダウンロードされたというログを出力したいのですが、方法がわかりません。現在、それ以外の場所でのログはPHPの関数を用意し、ログ出力しております。
<aタグを使用しているので、JavaScriptで、マウスイベントを取得できるかと思ったのですが・・・。いい方法があれば教えていただきたいと思います。
よろしくお願いします。
No.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;
}
?>
No.2
- 回答日時:
>「ファイル名を受け取って、それをヘッダとともに出力する」
> というのはどのようにすればよろしいのでしょうか?
言葉の通りですが、具体的に言えば
パスをコードに変換して、必要なヘッダー(content-type等)とともにはき出し、そのファイルを標準出力で書き出す…といった感じです。
この通り後はコーディングすれば上手くダウンロードできると思いますよ。
No.1
- 回答日時:
こんにちは。
現在直接ファイルに対してリンクを貼ってあるものに、一段階サーバ側の
スクリプトをかませるようにしたらいかがでしょうか?
<a href="./fileout.php?file=aaa.pdf">ダウンロード</a>
fileout.phpはファイル名を受け取って、それをヘッダとともに出力するように作れば、
fileout.phpの中の処理で、ダウンロードされたというログを出せると思います。
(リンク集などのランキングと同じ仕組み)
リンクをクリックした時点でサーバに要求は行ってるので、それを受けとれるスクリプトを用意してあげればよいわけです。
この回答への補足
早速の回答ありがとうございます。
「ファイル名を受け取って、それをヘッダとともに出力する」というのはどのようにすればよろしいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(クラウドサービス・オンラインストレージ) firestorage_androidスマホでダウンロードできない 1 2022/10/25 08:18
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- 電子書籍 ファイルピックについて 1 2022/08/07 00:07
- その他(スマホアプリ・スマホゲーム) アプリをスマホにダウンロード、インストールする方法 3 2022/08/13 11:26
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- その他(クラウドサービス・オンラインストレージ) OneDriveの同期ができません。助けてください。 1 2023/06/13 17:02
- その他(IT・Webサービス) WEBサイト内のファイルを探す方法は? 1 2022/11/11 16:38
- MySQL MySQL,JavaScript,PHPコードの結果を表示する方法を教えてください。 1 2023/02/13 17:49
- WordPress(ワードプレス) [BuddyPress]試したいのですが! 3 2022/06/01 13:36
- Google Drive googleフォト→USB 1 2022/04/15 22:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ftp_getでローカルにファイルが...
-
phpでzipファイルダウンロード...
-
ファイルのダウンロードが出来ない
-
eclipseでコメントアウトができ...
-
【Spreadsheet_Excel_Writer】...
-
PHPで生成したファイルをダウン...
-
Localeクラスについて
-
pictureboxに表示した画像のフ...
-
onedrive にexcelファイルをア...
-
コマンドプロンプトで添付ファ...
-
HTMLファイル内の行数を指定し...
-
html込みの文字列をPHPの変数に...
-
PHPでのindex.htmlの生成ができ...
-
require,includeとAjaxで分岐
-
訪問回数が素数の場合、違うメ...
-
phpからoutlook起動
-
フォントの色を変えるには?
-
ロケットBBSについて
-
Smarty includeでテンプレート...
-
ファイルについて・・・。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
zip圧縮の種類について
-
PHPで複数ファイルのダウン...
-
PDF ダウンロード
-
ファイル一覧を表示しその画面...
-
phpでうまく画像がダウンロード...
-
ファイルのダウンロードが出来ない
-
libxml2のインストール
-
CSV出力時の”0”表示(電話番号...
-
ダウンロードファイル名の文字...
-
ftp_getでローカルにファイルが...
-
ファイルのダウンロードのイベ...
-
VB.NETのFTPダウンロードについて
-
PHPでダウンロードしたファイル...
-
複数ファイルを連続でダウンロード
-
PHPでファイルのダウンロードす...
-
PHPで複数ファイルをZIPで圧縮...
-
PHPでgz形式のファイルをダウン...
-
連続ダウンロードのエラー
-
CSVファイルのダウンロード
-
【PHP】ダウンロードサイト作成...
おすすめ情報