【问题标题】:PHP flat file download counterPHP平面文件下载计数器
【发布时间】:2010-08-30 21:43:05
【问题描述】:

我得到了这个免费的 php 脚本来跟踪下载统计信息。真的很简单,它只是计算下载量并将其传递到日志文件,另一个脚本使用该日志文件显示前 10 名列表。所以这正是我需要的,所以我真的很想让这个脚本工作。但事实并非如此。当然。我对 php 的了解有限(但自从遇到这个脚本以来学到了很多东西!)。据作者说,它已经在类似于我的 Apache 和 php 版本上进行了测试,没有问题。所以我一直犹豫要不要真正改变任何代码。我试图将日志文件和/或整个子目录更改为 666 和 777,但没有成功。 我自己糟糕的侦探工作毫无结果,我真的试过了。所以我求助于我通常从不做的一件事,寻求帮助。

链接的格式应该是:

<a href=http://www.yoursite.com/downloader/download.php?number=1&file=filename.zip>

download.php 如下:

$number = $_GET['number'];

$file = $_GET['file'];


$logfile = "ROOT DIRECTORY PATH/logfile.txt";

$array[dir_1] = "URL PATH/DOWNLOADFILESFOLDER";

    $download = "dir"."_"."$number";

    if ($array[$download]) {


    $fp = fopen($logfile,'r');

     while (!feof($fp))

    {

    $data[] =  chop(fgets($fp,4096));

    }

    fclose($fp);


    $fp = fopen($logfile,"w");

    if (flock($fp,LOCK_EX)) {

    // list and split each filename and number of downloads

    foreach ($data as $lines){
    list($downloads,$filename,$realname) = split("\|",$lines);


        // check if file already exists and add one more download if it does

    if ($filename == $file){

       $downloads++;

        }

        if ($filename <> ""){
        fputs($fp,"$downloads|$filename|$realname\r\n");

        }

    }

    flock($fp,LOCK_UN);

    }

    fclose($fp);




    header("Location: $array[$download]/$file");



}

但是脚本的一部分对我来说没有意义;如果以前从未下载过文件,它从哪里获取文件名和实名,以便可以将其放入日志文件中? list() 函数和目录数组让我有点吃惊。虽然看起来合乎逻辑。 如果有人发现一些基本错误或对我如何继续有一些提示,我们将不胜感激。

PS。如果有帮助,我正在尝试跟踪 pdf 文件。

更新!通过善意的建议,我运行了错误报告并得到了一个错误。错误的脚本中有一个错误,我将其删除。我再次运行错误检查,只得到关于未定义变量的“通知”。我把报错改成

error_reporting(E_ALL ^ E_NOTICE);

之后,就没有任何错误了。

【问题讨论】:

  • 您在实施过程中是否真的将“RO​​OT DIRECTORY PATH”和“URL PATH”更改为您的?

标签: php download counter


【解决方案1】:

你必须改变这些:

$logfile = "ROOT DIRECTORY PATH/logfile.txt";
$array[dir_1] = "URL PATH/DOWNLOADFILESFOLDER";

到你的实际路径。

下一次,打开错误报告,这样您就可以知道什么时候抛出错误。一种方法是在脚本顶部添加以下行:

error_reporting(-1) // will show all errors

见:http://php.net/manual/en/function.error-reporting.php

【讨论】:

  • 哦,我做到了!为了简单起见,我只是在此处进行了解释。
  • @Xant 打开错误报告(见我的回答)并告诉我们它说了什么。
  • 我收到以下错误消息:解析错误:语法错误,意外 T_IF,期待 ',' 或 ';'在第 70 行的 /afs/su.se/services/www/hosts/www.ne.su.se/pages/ed/downloader/download.php 有点意外!
  • @Xant 第 70 行(及其附近)是什么?
  • 如果文件已经存在,这似乎是增量计数器:第 70 行--> if ($filename == $file){ $downloads++; }
猜你喜欢
  • 1970-01-01
  • 2015-12-11
  • 2011-11-05
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
相关资源
最近更新 更多