PHP - 强制下载对话框:根据用户输入设置特定操作?

时间:2015-06-06 23:47:41

标签: php force-download

我正在建立一个用户可以收听,上传或下载mp3文件的门户网站,但是当用户以前将mp3文件上传到服务器时,下载选项才可用(尚未实现)。

我在mysql表中有一个字段(名为'descargas'),用于跟踪用户上传后的可用下载量(增加字段值1)或下载mp3文件(减少字段值减1)。我还使用会话变量($ _SESSION ['descargas'])来跟踪可用的下载。

上传部分很好,但我的下载部分有一个小问题:我需要以某种方式告诉php,如果用户选择在对话框出现时不下载文件,则不会应用减1。

我正在使用php的强制下载方法(但是使用POST方法,而不是官方的GET修复方法),单独的下载文件位于与mp3文件相同的目录中,我当前的问题用户的可用下载将被一个人扣除,即使他们选择不继续下载。

另一个问题是,即使可用下载量等于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页面的名称,即使正在访问该页面。

0 个答案:

没有答案