Как такое реализовать на php

Статус
В этой теме нельзя размещать новые ответы.

mikki009

Создатель
Регистрация
3 Окт 2008
Сообщения
35
Реакции
4
Наткнулся на одном Для просмотра ссылки Войди или Зарегистрируйсявывод файлов . Т.е название файла, кол-во скачиваний, ссылка на стр. и рейтинг. Возможно ли такое реализовать на php и есть ли уже готовые решения для этого. Спасибо.
 
вы можете взять любую готовую cms например joomla или drupal под них нписанно очень много разных файловых архивов
 
Или просто взять скрипт любого файлового архива, без всяких CMS.
 
Самое простое, что в голову лезет - вместо ссылки на файл делай ссылку на скрипт подсчёта, который увеличивает счётчик:
Код:
<a href="download.php?file=1.zip">файл</a>
ну и сам download.php:
PHP:
<?php
$file=$_GET['file'];
/*
...
код увеличения счётчика скачиваний файла на 1;
например на SQL:
UPDATE files SET downloads=downloads+1 WHERE file='$file'");
...
*/
header("Location: $file");
?>

В коде нет никакой защиты от SQL инъектов и подстановки путей. Привожу лишь для примера понятия принципа.
 
Готовое решение с подобным подходом - "Fast Click"

но , есть у него (как и у других с тем же подходом) пара минусов -
1. Раскрывается путь к файлу. Его можно будет скачать в обход счетчика и ограничений (если они есть).
2. Если файл недоступен / юзер не стал докачивать, счетчик всеравно плюсанется.

Это можно обойти если файл выдавать самим скриптом, а инкремент делать после выдачи всего файла.
 
Как определить что файл полность скачен??
 
если выдаешь файл скриптом то так
PHP:
<?
function get_extension($file) {
	return strtolower(substr(strrchr($file, "."), 1));
}

function get_file_name($file) {
	return strtolower(substr(strrchr($file, "/"), 1));
}

$file = "z:/home/localhost/www/test.zip";

if(!file_exists($file))	
		{
		header("HTTP/1.0 404 Not found");
		die("<html><body><h1>404 Файл не найден!</h1>запрошенный файл не найден.</body></html>\n");
		}

$ext = get_extension($file);
switch($ext)
	{
	case "zip":
		$type = "application/zip";
		break;
	default:
		$type = "image/unknown";
		break;
	}
header("Content-transfer-encoding: binary");
header("Content-disposition: inline; filename=\"".get_file_name($file)."\"");
header("Content-type: ".$type);
header("Content-length: ".filesize($file));
	
$handle=fopen($file,"r");
if ($handle) 
	while (!feof($handle)) {
		$buffer = fgets($handle, 4096);
		echo $buffer;
		}
fclose($handle);	 
// тут передача файла завершена, можно делать инкермент
?>


но у этого метода есть свои недостатки
1. грузится проц, т.к. вся выдача идет через php
2. нет докачки файла
т.е. данный метод непременим для больших фалов.
 
  • Заблокирован
  • #8
помнится есть бесплатный скрипт от ManHunter - под файловый обменник. ТАм примерно такой же вывод файлов настраивается
 
елси сайт не стоит на какой-лиюо CMS то проще написать самому, быстрее по крайней мере точно
 
aravak написал(а):
то проще написать самому, быстрее по крайней мере точно
Ну не быстрее и не проще.
С нуля код писать всегда сложнее.
Надо взять за основу какой нибудь пример, да хоть бы тот скрипт "Fast Click"
И потом наращивать функционал: добавление баз данных или выдача файлов с докачкой.
Последнее элементарно гуглится по запросу "php скачивание с докачкой", первая ссылка - оно
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху