It's better when it's simple

User Tools

Site Tools


DLCount Plugin

Compatible with DokuWiki

Lemming, Anteater, Rincewind, Angua, Adora Belle, Weatherwax, Binky, Ponder Stibbons

plugin Adds download counter to download links

Last updated on
Admin, Action

This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.

Tagged with counter, download

How it works

The plugin registers hooks for some events. It creates the meta-files below data/meta/_media/ in the same way DokuWiki does create its meta-data for normal pages.


This event is triggered when someone downloads a file. First it is checked whether this is a real download or a browser fetching an embedded image. In the latter case, it does nothing.

If this is a real download, it calculates the path to the meta-file. E.g. if someone is downloading, the meta file would be:


This contains a serialized structure which currently only holds an array containing a dlcount key with the actual download count. Maybe later this holds a complete log of all downloads of the file or at least the last 10 IPs downloading it…

The download counter is incremented by 1 and the new data is serialized and written back to the meta file.

If the file doesn't exist, it is created.


This event is triggered when a page is displayed. The plugin then wanders all A (=anchor) elements of the page and checks them for the mediafile class which indicates that this link is pointing to a download. Then the path to the meta-file is calculated and the number of downloads read from it. (If this file doesn't exist, a count of “0” is assumed.) In the last step, the count is added after the anchor.


This event is triggered after a new file was uploaded to the media library. If you overwrite an already existing file, the download counts for this file get reset to 0 (because there's now a new file online).


This event is triggered upon deletion of a file from the media library. This will also delete the associated meta data.



I have noticed that plugin does not correctly treat media filenames when file encoding is UTF-8 (not URL-escaped). See commit ae10f61 for the fix.

dma_k 2016-09-19 01:39


1) For linux web-hosting is ok. Does not work for windows localhost:

  • rewriting option = (1)
  • dokuwiki?do=admin&page=dlcounterror: Warning: glob(): Pattern exceeds the maximum allowed length of 260 characters in D:\..\DokuWikiStick\dokuwiki\lib\plugins\dlcount\admin.php on line 48

2) How to count link hits?


Does not work for sites without url rewriting. Sites with no rewrite Option (0) DOES NOT WORK. Working for Dokuwiki (internal) rewriting option (2), and webserver rewriting option (1). –Mat Witts

Added Patches from Andreas and create a German Translation

Thomas Süß 2010-02-09

Hello, I have installed the first two patches from Andreas, and a German translation created. Warning - this is not an official version. More information and Download at:, please test and feedback to me.


When pdf extension is registered in the mime.conf as:

pdf application/pdf

it must not be counted, it is embedded. Unfortunately the plugin still shows the size, the time and 0 downloads for Pdfs. The counter stays 0 of course. I think it is a bug - if the extension marked as embedded, plugin should not show this information at all… — BrakeFluid


Any reason why in my DokuWiki installation (2009-02-14) the plugin just won't create the _media/* files? (thus reporting all my files as 0 downloads) – — Luis 2010/01/13 21:27

For me it was not counting pdf file. It always show 0. I am not expert so I found solution by hit and trial

In Dokuwiki installation go to “conf/mime.conf”
open mime.conf in notepad
where it is written

pdf application/pdf

Replace it with

pdf !application/pdf

means just put ! sign before application. But be careful as I said I am not expert. Now it is counting pdf files for me. :-)
2014-06-27 (William Yin)
If your site on Windows Server system, you must be corrected dlcount's code with follow:

In action.php function metaFnFromFullPath():

Original line:
$fn = str_replace($mediadir, '', $fullpath);

Corrected line:

$fn = str_replace('\\', '/', $mediadir);
$fn = str_replace($fn, '', $fullpath);

2009-10-09 (Andreas Vogel)

I have found two things which didn't work for me and I suggest to fix this in the plugin as well.

1) In admin.php function handle():

Original line:

$this->mediafiles = $this->glob_recursive($conf['mediadir'] . '/*.*');

Corrected line:

$this->mediafiles = $this->glob_recursive($conf['mediadir'] . '/*');

Without this modification no media files and directories are found at my site.

2) In admin.php function handle():

Add this code directly after the “foreach …” loop statement:

if (is_dir($mediafile)) {

Without this statement directories will be shown as downloadable files on the download statistic page. This doesn't make sense.

3) In action.php function _showcount():

After the line

$fn = substr($href, strpos($href, '/_media/')+strlen('/_media/')-1);

add the line

$fn = str_replace(':', '/', $fn);

After rewriting the URL when using the mod_rewrite feature in .htaccess the colon needs to be replaced by a slash too - like in the other cases.


Constants in objects start working with PHP 5.
One way is to update (that's the better way to go. php4 is out of support), the other is to go to line 16/17 in admin.php and action.php, delete them and put this above the class definition:

define('dlcount_DATADIR','_media');   // below $conf['metadir'], no trailing slash

Then go throu the code and replace every self::DATADIR and self::SUFFIX with dlcount_DATADIR and dlcount_SUFFIX

After that it should work with PHP 4



after installation via plugin manager the following errors occurs:

Parse error: syntax error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /dokuwiki/lib/plugins/dlcount/action.php on line 16

is there a solution for that?



I still have a problem, even I use latest version. After 'media' colons in namespace are not replaced by backslashes.

Should be fixed now. —mARKUS


Second problem…download statistic failed by next errors:

I fix it by replacing of glob_recursive function by little different function instead:
  function all_files($dir)
    $files = Array();
    $file_tmp= glob($dir.'*',GLOB_MARK | GLOB_NOSORT);
    foreach($file_tmp as $item){
            $files[] = $item;
            $files = array_merge($files,all_files($item));
    return $files;


I changed glob_recursive() a bit … please try the latest version. —mARKUS

It not produce errors now, but not working well. :( It's looks like no media files are on my server. I switch back to my previous modified routine and all is fine. —Geby

plugin/dlcount.txt · Last modified: 2023-12-17 21:38 by Aleksandr

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki