此代码用于提取文件目录和标题。单击文件链接时用户下载。我需要计算下载次数。如何用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));
?>
答案 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创建一个视图。基本上,当您单击页面上的文件链接时,它将调用此函数,该函数将使用其视图来提供文件。
您可以访问以下内容,以便了解需要完成的工作。
答案 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();
}