いつもお世話になっております。
タイトルの表記が的を得ていないかもしれませんので、説明させてください。
現在、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を探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
zip圧縮の種類について
-
eclipseでコメントアウトができ...
-
【追加】ファイルを閉じてダイ...
-
FORMで送信ボタンと戻るボタン...
-
リンク先を隠す方法はないでし...
-
PHPでフォルダ選択ダイアログを...
-
PHPのif文でその処理を途中で抜...
-
一部だけ動くGIFアニメを作りたい
-
別ファイルの変数を呼び出した...
-
stat failed
-
mysqlのblob型の画像表示について
-
日付と年月日を選択するコード...
-
MySQL からPostgreSQL へ移行後...
-
renameでのPermission deniedエ...
-
phpinfoの内容が見れない
-
phpでクラスのメソッドで同名の...
-
画面遷移させずに、選択画像フ...
-
include先でのinclude元の変数...
-
ファイルアップロードに関して...
-
トランザクションが原因?DBに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETのFTPダウンロードについて
-
zip圧縮の種類について
-
phpでうまく画像がダウンロード...
-
eclipseでコメントアウトができ...
-
PHPで複数ファイルのダウン...
-
ファイルのダウンロードのイベ...
-
ダウンロードファイル名の文字...
-
複数ファイルを連続でダウンロード
-
libxml2のインストール
-
PHPでファイルのダウンロードす...
-
CSV出力時の”0”表示(電話番号...
-
ブラウザでExcelをダウンロード...
-
PHPでファイルをダウンロードさ...
-
指定したURLからファイル(PDF...
-
cakephpでのダウンロード機能の...
-
日本語ファイル名のアップロー...
-
ダウンロードすると画像が壊れ...
-
サーバー上のファイルをブラウ...
-
CSVファイルのダウンロード
-
Excelファイルをダウンロード
おすすめ情報