Счетчик загрузки плоских файлов PHP - PullRequest
0 голосов
/ 31 августа 2010

Я получил этот свободно доступный php-скрипт для отслеживания статистики загрузки. На самом деле все просто, он просто считает количество загрузок и передает его в файл журнала, а другой скрипт использует этот файл журнала для отображения списка 10 лучших. Так что это именно то, что мне нужно, поэтому мне бы очень хотелось, чтобы этот скрипт работал. Но это не так. Конечно. У меня ограниченные знания в php (но я многому научился с тех пор, как встретил этот скрипт!). По словам автора, он был протестирован на Apache- и php-версиях, похожих на мою, без проблем. Так что я не решался на самом деле изменить любой код. Я попытался chmod logfile и / или весь подкаталог к ​​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! По доброму предложению я запустил сообщение об ошибке и получил ошибку. В неисправных скриптах была ошибка, которую я удалил. Я снова запустил проверку ошибок и получил только «Уведомления» о неопределенных переменных. Я изменил сообщение об ошибке на

error_reporting(E_ALL ^ E_NOTICE);

После этого вообще никаких ошибок.

1 Ответ

2 голосов
/ 31 августа 2010

Вы должны изменить это:

$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

...