如何计算用户下载次数

时间:2012-01-16 09:20:39

标签: php cakephp cakephp-1.3

此代码用于提取文件目录和标题。单击文件链接时用户下载。我需要计算下载次数。如何用cakephp或php做到这一点?

downloads_controller.php:

function index() {
    $this->set('downloads', $this->paginate());
}

下载/ index.ctp:

<?php
    $title = $download['Download']['title']; 
    // output filetitle 
    $filename = '/files/'.$download['Download']['filename']; 
    // output http://localhost/tet/files/un5titled0.rar
    echo $this->Html->link($title, $filename,array('escape' => false)); 
?>

4 个答案:

答案 0 :(得分:2)

恐怕不是这种方式。

您需要从动作重定向(在重定向之前计数)或使用媒体视图传递它。 多数民众赞成我是如何做到的。 在操作中,您可以在发送文件之前提高计数。

答案 1 :(得分:2)

如果要计算下载次数,则应创建一个为这些下载提供服务的函数,并在数据库中创建一个字段,每次调用此函数时都会增加下载量。例如

通过$filename$id

从您的视图中调用以下函数

要在第一次使用时试用,请将ID = 4作为数据库中的下载ID之一

http://www.yourdomain.com/downloads/download/4

然后你的控制器就会......

Class DownloadsController extends AppController{
    // All your other functions here

    function download($id = null){

        $this->Article->updateAll(
            array('Download.count' => 'Download.count+1'),
            array('Download.id' => $id)
        );

        $download = $this->Download->findById($id);

        $this->set('filename', $download['Download']['filename']);

        //$filename is an array that can then be used in your view to pass the file for download. to find out what is has you can use debug($filename) in your view
        }
}

然后,您需要创建一个特殊的布局,以便浏览器知道请求文件是下载的,您还需要为download.ctp创建一个视图。基本上,当您单击页面上的文件链接时,它将调用此函数,该函数将使用其视图来提供文件。

您可以访问以下内容,以便了解需要完成的工作。

TUTORIAL LINK

答案 2 :(得分:1)

有很多技术,但最简单的方法是,您可以使用文本文件来执行此操作。

创建一个txt文件并将0(零)写入其中。

在索引功能中,阅读文件内容。

$counter = file_read_contents('counter.txt');

将读取值增加1。

$counter++;

再次将新值写入文件。

file_put_contents('counter.txt', $counter);

因此,它计算下载并保留该文件中的数字。

答案 3 :(得分:0)

function download($id = null) {
    $download = $this->Download->findById($id);
    $this->set(compact('download'));
    if(!empty($id)) {
        // increment the number of items downloads 
        $this->Download->save(array(
            'Download' => array(
                'id' => $id,
                'counts' => ($download['Download']['counts'] + 1)
            )
        ));
    }

    header('Location: http://localhost/tet/files/'.$download['Download']['filename']);
    exit();
}