PHP平面文件下载计数器

时间:2010-08-30 21:43:05

标签: php download counter

我有这个免费的php脚本来跟踪下载统计信息。简单来说,它只计算下载量并将其传递给日志文件,另一个脚本使用该日志文件显示前10个列表。所以这正是我需要的,所以我真的想让这个脚本工作。但事实并非如此。当然。我对php的知识有限(但自从遇到这个脚本以来已经学到了很多东西!)。根据作者的说法,它已经在类似于我的Apache和php版本上进行了测试,没有任何问题。所以我一直犹豫要改变任何代码。我试图chmod日志文件和/或整个子目录到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文件,如果这有帮助。

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

error_reporting(E_ALL ^ E_NOTICE);

之后,根本没有错误。

1 个答案:

答案 0 :(得分:2)

你必须改变这些:

$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