Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Статистика скачиваний файла, Как это можно сделать?.. 
:(
    Опции темы
Vitalik
Дата 1.10.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Собственно САБЖ smile

Я так подозреваю, что для скачивания файла нужно давать не прямой линк на файл, а линк на специальную php-шку, в которой я буду увеличивать нужные счётчики и каким-то образом подставлять файлик для скачивания... Вот с последним и проблемы... Как это можно сделать?..

Заранее спасибо!
PM MAIL WWW ICQ YIM   Вверх
Darhazer
Дата 1.10.2005, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 7
Всего: 29



Простейший начин:
Код
header("Location: адрес_файла");




--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 1.10.2005, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Цитата(Darhazer @ 1.10.2005, 17:24)
Простейший начин:
header("Location: адрес_файла");

Ё-моё, действительно! smile И как я не догадался!!! smile
PM MAIL WWW ICQ YIM   Вверх
Mal Hack
Дата 1.10.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Ну скачиавние делаешьтак:
1. Ссылки типа: ?song=13131
2. Открываешь новое окно win.php?song=1231
3. Увеличиваешь в БД счетчик скачивания, где ID файла - переменная $_GET['song'].
4. Посылаешь сам файл пользователю.
5. Закрываешь окно.

Только файл не одним header'ом посылаешь.
PM ICQ   Вверх
Vitalik
Дата 1.10.2005, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Цитата(Mal @ 1.10.2005, 19:18)
Ну скачиавние делаешьтак:
1. Ссылки типа: ?song=13131
2. Открываешь новое окно win.php?song=1231
3. Увеличиваешь в БД счетчик скачивания, где ID файла - переменная $_GET['song'].
4. Посылаешь сам файл пользователю.

Угу, я так и собирался smile

Цитата(Mal @ 1.10.2005, 19:18)
5. Закрываешь окно.

Гм... Эт как?
А файл пользователь всё-таки успеет получить?..

Цитата(Mal @ 1.10.2005, 19:18)
Только файл не одним header'ом посылаешь.

Подробнее, плиз smile
PM MAIL WWW ICQ YIM   Вверх
Mal Hack
Дата 1.10.2005, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Vitalik @ 2.10.2005, 00:13)
Гм... Эт как?
А файл пользователь всё-таки успеет получить?..

ты открываешь окно, посылаешь файл пользователю, а затем выводишь JS код закрытия окна.

Цитата(Vitalik @ 2.10.2005, 00:13)
Подробнее, плиз smile

Код

<?php

$file_server_path = "123.zip";
$download_size = filesize( $file_server_path );

header("Content-type: application/x-download");
header("Content-Disposition: attachment; filename=" . $file_server_path  . ";");
header("Accept-Ranges: bytes");
header("Content-Length: " . $download_size );
readfile( $file_server_path );

?>

В качестве Content-type можно использовать application/octet-stream application/x-download и unknown/unknown
PM ICQ   Вверх
Darhazer
Дата 1.10.2005, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 7
Всего: 29



Цитата(Vitalik @ 1.10.2005, 23:13)
Цитата(Mal @ 1.10.2005, )
5. Закрываешь окно.

Гм... Эт как?
А файл пользователь всё-таки успеет получить?..

Код
window.close()

Работаеть только в окнах, которые создал через window.open()

Цитата(Mal @ 1.10.2005, 19:18)
Только файл не одним header'ом посылаешь.

Подробнее, плиз smile

Другой способ для скачивания могу напиать в понедельник, у меня в офисе, но в принципе делаеться так (код взял с php.net)

edit: Mal Hack уже написал лучший код

Ну надо поекспериментировать не много, я делал так скачивания динамически сгенерированого .gz файла

P.S. вообщем почитай коментарии к функции Header

Это сообщение отредактировал(а) Darhazer - 1.10.2005, 23:21


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 2.10.2005, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Mal Hack, всё заработало и без открытия новых окон, просто подставил твой код с header'ами smile
Правда правильно это работает только в Опера. В IE почему-то имя файла берётся как имя php-шки smile
Что бы это могло быть?..
PM MAIL WWW ICQ YIM   Вверх
Mal Hack
Дата 2.10.2005, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Vitalik @ 3.10.2005, 00:00)
Правда правильно это работает только в Опера. В IE почему-то имя файла берётся как имя php-шки smile
Что бы это могло быть?..

Вообще, в Опере обычно идет глюк, если файл не стоит, как application/octet-stream...
В ИЕ такого быть не должно.


Цитата(Vitalik @ 3.10.2005, 00:00)
Что бы это могло быть?..

Покажи полностью этот код, особенно то, что находится в $file_server_path.
Если там папка, тиобишь что-ть вроде /234/24/234/234/234.zip, то возможно, что ИЕ подменяет ее на значение ПХП файла...
PM ICQ   Вверх
Vitalik
Дата 3.10.2005, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Цитата(Mal @ 2.10.2005, 23:04)
Вообще, в Опере обычно идет глюк, если файл не стоит, как application/octet-stream...

Что за глюк?

Цитата(Mal @ 2.10.2005, 23:04)
Покажи полностью этот код, особенно то, что находится в $file_server_path.

Код
  if($action == "download" && (!isset($_GET['param']) || $_GET['param'] == 'highlighter'))
  {
    GetHighlighter($_GET['id'], $filename, $name, $desc, $author_id, $author, $date, $nloads);
    $filename = "files/highlighters/$filename";
    $download_size = filesize( $filename );
    header("Content-type: application/x-download");
    header("Content-Disposition: attachment; filename=" . $filename . ";");
    header("Accept-Ranges: bytes");
    header("Content-Length: " . $download_size );
    readfile( $filename );
    exit;
  }

GetHighlighter возвращает относительный путь от папки files/highlighters, а сама эта папка находится там же где и index.php.
Таким образом в $filename получаем нечто вроде "files/highlighters/somefile.zip".
Попробовал и такой вариант (абсолютный путь):
Код
$filename = $_SERVER['DOCUMENT_ROOT']."/synportal/files/highlighters/$filename";
но эффект тот же smile

Цитата(Mal @ 2.10.2005, 23:04)
Если там папка, тиобишь что-ть вроде /234/24/234/234/234.zip, то возможно, что ИЕ подменяет ее на значение ПХП файла...

Не понял. А какое там еще может быть значение?.. И почему это он её так подменяет?..
PM MAIL WWW ICQ YIM   Вверх
Mal Hack
Дата 3.10.2005, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Vitalik @ 3.10.2005, 01:41)
Что за глюк?

Она его выводит...


Попробуй так:
Код

  if($action == "download" && (!isset($_GET['param']) || $_GET['param'] == 'highlighter'))
  {
    GetHighlighter($_GET['id'], $filename, $name, $desc, $author_id, $author, $date, $nloads);

    $download_size = filesize( "files/highlighters/$filename" );
    header("Content-type: application/x-download");
    header("Content-Disposition: attachment; filename=" . $filename . ";");
    header("Accept-Ranges: bytes");
    header("Content-Length: " . $download_size );
    readfile( "files/highlighters/$filename" );
    exit;
  }

PM ICQ   Вверх
Vitalik
Дата 3.10.2005, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Цитата(Mal @ 3.10.2005, 16:01)
Попробуй так:

Эффект тот же smile
PM MAIL WWW ICQ YIM   Вверх
Darhazer
Дата 3.10.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 7
Всего: 29



Привет,
я делаю закачку так:

Код

function downloadFile($path, $name, $mime){
    if ($fd = fopen ($path, "r")){
        $disposition = "attachment"; // "inline" to view file in browser or "attachment" to download to hard disk
        //$mime = "image/jpeg"; // or whatever the mime type is
        //$name = "foo.jpg"; // file name
        //$path = "/path/to/foo.jpg"; // full path and file name

        if (isset($_SERVER["HTTPS"])) {
            /**
            * We need to set the following headers to make downloads work using IE in HTTPS mode.
            */
            header("Pragma: ");
            header("Cache-Control: ");
            header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
            header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
            header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
            header("Cache-Control: post-check=0, pre-check=0", false);
        }
        else if ($disposition == "attachment") {
            header("Cache-control: private");
        }
        else {
            header("Cache-Control: no-cache, must-revalidate");
            header("Pragma: no-cache");
        }
        header("Content-Type: $mime");
        header("Content-Disposition:$disposition; filename=\"".trim(htmlentities($name))."\"");
        header("Content-Description: ".trim(htmlentities($name)));
        header("Content-Length: ".(string)(filesize($path)));
        //header("Connection: close");
        while(!feof($fd)) {
            $buffer = fread($fd, 2048);
            print $buffer;
        }
        fclose ($fd);
        unlink($path);
        rmdir(dirname($path));
    }
}


P.S. Только что проверил под IE 6, Firefox 1.0.7, Opera 8.50 - работаеть

Это сообщение отредактировал(а) Darhazer - 3.10.2005, 16:54


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Vitalik
Дата 3.10.2005, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Координатор проекта
Сообщений: 653
Регистрация: 8.11.2004
Где: Ukraine, Kharkov

Репутация: нет
Всего: 12



Цитата(Mal @ 3.10.2005, 16:01)
Попробуй так:

Всё! Заработало! Я просто сделал еще basename($filename); ведь в $filename тоже может быть относительный путь smile
Спасибо! smile

Цитата(Darhazer @ 3.10.2005, 16:51)
я делаю закачку так:

Ого! smile
Тоже спасибо, но не люблю когда много кода получается smile
PM MAIL WWW ICQ YIM   Вверх
Mal Hack
Дата 3.10.2005, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Vitalik @ 3.10.2005, 18:32)
Всё! Заработало! Я просто сделал еще basename($filename); ведь в $filename тоже может быть относительный путь smile
Спасибо! smile

нзч, если что обращайся smile
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0659 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.