0

訪問者に配布したいファイルへの直接リンクがあります。たとえば、次のようになります。

http://www.mydomain.com/mynewmix.mp3

上記のリンクが ping/hit/download されているときに、次のクエリを実行する方法はありますか?

UPDATE `db` SET `downloaded`=`downloaded`+1 WHERE `url`='http://www.mydomain.com/mynewmix.mp3'

これについて私が得ることができるどんな種類の助けも大歓迎です. よろしくお願いします。

4

3 に答える 3

2

はい、これは可能です。Apacheで書き換えモジュールを使用できます。したがって、すべての(mp3)ファイルについて、サーバーはmp3ファイルを返すのではなく、クエリを実行してmp3ファイルを返すphpファイル/スクリプトを実行する必要があると言えます。

これはあなたを助けるかもしれません: http://www.workingwith.me.uk/articles/scripting/mod_rewrite

.htaccess ファイルで:

RewriteEngine on
RewriteRule ^\.mp3$ index.php [L]

これにより、.mp3 で終わるすべてのリンクが index.php に送信されます (実際には同じリンクですが、index.php が実行されます)。

あなたが持っている他のオプション:

RewriteRule ^.*/(\w)*\.mp3$ index.php?filename=$1 [L] 

これにより、GET veriable filename を使用して index.php が実行されます。$_GET['filename'] = "filename"(ファイル名.mp3の場合)

index.php で、ユーザーが mp3 ファイルをダウンロードできるようにします (参照: PHP で MP3 ファイルを提供できますか? ):

header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-length: ' . filesize("[file location eg: /home/files/sometrack.mp3]"));
header('Content-Disposition: attachment; filename="sometrack.mp3"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile("[file location eg: /home/files/sometrack.mp3]");
exit();

次のコードを使用して、これを動的に行うことができます。

$fileName = $_GET['filename']."mp3"; //we stripped .mp3 in the apache rewrite (might not be so smart)
$fileLocation = "/your/location/".$filename;
header("Content-Transfer-Encoding: binary"); 
header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
header('Content-length: ' . filesize($fileLocation));
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($fileLocation);
exit();

要求されたリンクには次の方法でアクセスできます。

$_SERVER['REQUEST_URI'];

または新しい(生成されたURL):

$_SERVER['REDIRECT_URL'];
于 2013-03-29T09:38:44.217 に答える
1

あなたが望むことをする別の方法があると思います:

  1. パラメータを使用してダウンロードを開始するための新しいphpファイル「ダウンロード」を作成しますコンテンツは次のようになります(日付と時刻はmp3ファイルを取得するためのキーです)

    <?php
        if (isset($_GET['date']) && is_string($_GET['date']) && isset($_GET['time']) && is_string($_GET['time']))
        {
            require_once($_SERVER['DOCUMENT_ROOT'] . "/bin/functions.php");
            DownloadFile($_GET['date'],$_GET['time']);
        }
    ?>
    
  2. 関数「DownloadFile」を使用して、別の php ファイル「functions.php」を作成します。

    function DownloadFile($Date,$Time)
    {
        require('connection.php');
        mysql_select_db($database, $instance);
    
        $qry = "
            UPDATE `table` 
            SET `Field1` = `Field1` + 1
            WHERE `Field2` = '$Date' AND `Field3` = '$Time'
            ";
        $result = mysql_query($qry, $instance) or die(mysql_error());
    
        header('Content-type: Application/mp3');
        header("Content-Length: " .(string)(filesize($file)));
        header('Content-Disposition: attachment; filename=' . $file);
        readfile($file);    
    

    }

  3. ダウンロードに別の URL を使用する (アンカーなし)

http://www.yoursite.com/xxx/download.php?date=2000-01-01&time=12:00:00

于 2013-12-03T20:47:07.207 に答える
0

はい、できます。URLをクリックすると、ajaxを呼び出して更新クエリを実行する必要があり、成功するとファイルのダウンロードに進みます。

于 2013-03-29T09:42:18.740 に答える