私はここでPHPのことを試している.NETの男です。だから今私の快適ゾーンから完全に外れています。PHPを使用してホストファイル、ログダウンロード、およびホストの統計情報を表示しますか?
download.php
::私は私がやりたいTHINKする3つのファイルを持つことである(a)は(そう
download.php?file=11
クエリ文字列は、私に語った私はabc.zipホストする必要があり、ファイル名にIDの参照が含まれています)stats.log
にこのダウンロードをログに記録する(b)のいくつかのコード(C)夫婦
header()
コールとreadfile()
CA LL、this questionstats.log
への答えに似て:次の例のようになりますシンプルなログファイル。これにより、単にテキストの行を追加するだけでログを達成できるようになりますが、時折それを凝縮させることができます。
abc.zip 1234
xyz.zip 4321
abc.zip 1
abc.zip 1
abc.zip 1
xyz.zip 1
abc.zip 1
stats.php
:これは、最終的に統計情報を提供していPHPファイルです。リアルタイムまたはほぼリアルタイムにすることができます。おそらく、ファイルを毎分読み直してキャッシングすることができます。私は本当に気にしないし、これはすべて頻繁にヒットされませんが、私はこれが愚かな高価な操作ではないことを確認する必要があります。これはかなりのページである必要はありません。人間はそれを簡単に読むことができるので、そこには必要なものはありません。
abc.zip: 1238 downloads
xyz.zip: 4322 downloads
最終的に、私はデータベースまたは本に関わる他のシステムを望んでいない:stats.log
の上記の例では、私は、これは以下のようなものを提供したいと思います。私はサーバーへのFTPアクセスしか持っていないので、ディレクトリにスクリプトを置く以外のことはできません。私はスクリプトがstats.txt
への書き込み権限を持っていることを確認する必要があることを認識しています。これは問題ありません。
私の質問です。私はそれらの数を持っていますが、私は彼らがPHPを知っている誰かにとっては非常に簡単だと信じています。
- 私は、
download.php
のホスト部分が、ヘッダーの設定とreadfileの使用によって理解されていると思います。しかし、どのようにして、ファイルIDとファイル名を表すキー/値ペアのコレクションを得ることができますか?私が.NETにいたなら、私はvar foo = new Dictionary<int, string> {{11, "abc.zip"}, {12, "xyz.zip"}}
のようなことをすることができましたが、これはPHPのように見えません。 - クエリーストリングを取得するにはどうすればよいですか?私は、 "stuff/download.php?file = 11"というURLから引っ張って11を取って、私のルックアップコレクションから "abc.zip"を取得する必要があります。
stats.log
ファイルに改行を書き込むにはどうすればよいですか?stats.php
スクリプトでstats.log
ファイルをループしてカウントし、これらの統計情報をホストするにはどうすればよいですか?- ボーナスの質問:手順4の結果をキャッシュし、1分/ 1時間に1回だけファイルを読み込むにはどうすればよいですか?
誰かが少なくともこれらの質問のほとんどに答えることができる場合は、おそらく間違いなく記入することができます。 :)
フォローアップの質問:どのようにこれは同時ダウンロードを処理しますか?ダウンロード数を失ったり、統計ファイルをロックしたりして、他のダウンロードやその他のダウンロードでエラーが発生することはありますか?私は行を追加すると、ファイル全体を書き換えるよりも並行処理の問題がはるかに良くなると考えていました。 JSONデータとして保存する興味深いアイデア - 私はそれを考えなかった。 – Jaxidian
さて、私は自分の質問に答えたと思います。私はそれを開く前に、ファイルをロックする必要がありますし、この質問への答えに似て、ロックを解除する:http://stackoverflow.com/questions/293601/php-and-concurrent-file-access – Jaxidian
@ Jaxidian Haha、私たちは同じ答えを出してくれました。私の編集された反応を見てください。 – Shad