0

ユーザーがmp3ファイルを聞いたり、アップロードしたり、ダウンロードしたりできるポータルをセットアップしていますが、ダウンロードオプションは、ユーザーが以前にmp3ファイルをサーバーにアップロードしたときにのみ利用可能になります(まだ実装されていません)。

アップロード (フィールド値を 1 ずつ増やす) または mp3 ファイルのダウンロード (フィールド値を 1 ずつ減らす) 後に、ユーザーが利用可能なダウンロードを追跡する mysql テーブルにフィールド (「descargas」という名前) があります。また、セッション変数 ($_SESSION['descargas']) を使用して、利用可能なダウンロードを追跡します。

アップロード部分は問題ありませんが、ダウンロード部分に小さな問題があります。ダイアログが表示されたときにユーザーがファイルをダウンロードしないことを選択した場合、1 による減分は適用されないことを php に伝える必要があります。

私はmp3ファイルと同じディレクトリにある別のダウンロードファイルでphpに強制ダウンロードメソッドを使用しています(ただし、修正のための公式のGETメソッドとは対照的に、POSTメソッドを使用しています)。現在の問題は、ユーザーがダウンロードを続行しないことを選択した場合でも、ユーザーの利用可能なダウンロードは 1 つ差し引かれます。

もう 1 つの問題は、利用可能なダウンロード数が 0 の場合でも、保存ダイアログが表示され、リンクをクリックすると任意のファイルをダウンロードできることです。

ダウンロードファイルは次のとおりです。

<?php

session_start();

if (!isset($_POST['file_name']) || empty($_POST['file_name'])) {

    session_destroy();
    exit();
}

if(isset($_POST['file_name'])) {

    $file = basename($_POST['file_name']);    
    $size = filesize($file);

    $user=$_SESSION['usuario'];           
    $conexion4=mysqli_connect('localhost','usuariomusica2','1MusicUser1','musica2'); 

    $sentencia12=mysqli_query($conexion4, "update musica2.usuarios set descargas=descargas-1 where usuario='$user' and descargas > 0");   
    $sentencia13=mysqli_query($conexion4, "select * from musica2.usuarios where usuario='$user'");
    $row=mysqli_fetch_array($sentencia13);
    $_SESSION['descargas']=$row[5];

// Definir headers

    header('Cache-Control: no-cache, no-store, must-revalidate');
    header('Pragma: no-cache'); 
    header('Expires: 0'); 
    header('Content-Type: audio/mpeg3');
    header('Content-Disposition: attachment; filename="'.$file.'"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . $size);

// Descargar archivo

    readfile($file);
}

else {

    die('El archivo no existe.');
}

?>

どんなアイデアでも大歓迎です。問題を解決できるように、まったく別のルートをたどり、javascript や ajax を使用してダウンロード部分を実装する必要がある場合は、それを行います。

P:SI はまた、メイン ページで任意の曲のタグをクリックしても、ブラウザの URL が「download.php」に変わらないことにも気付きました。これは、ダウンロードを処理する php ページの名前です。ページが訪問されています。

4

0 に答える 0