Что нового

Доработка счётчика скачивания на php

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
Вот сделал скрипт перенаправления на указанный в параметре файл, сделал запись счётчика скачивании для каждого файла.

PHP:
<?php
	$sFile = $_GET['file'];
	
	header('Location: http://creator-lab.ucoz.ru/' . $sFile);
	
	$sCounterFile = 'Counter.dat';
	
	$fil = fopen($sCounterFile, r);
	$sData = fread($fil, filesize($sCounterFile)); 
	fclose($fil);
	
	$sEsc_File = str_replace('/', '\/', preg_quote($sFile));
	$iCounter = preg_replace('/.*?' . $sEsc_File . ': (\d+).*?/s', '$1', $sData);
	
	if ($iCounter==Null || $iCounter==$sData)
	{
		$sNewData = $sData . $sFile . ": 1\r\n";
		//echo 'Added: ' . $sNewData;
	}
	else
	{
		$sNewData = preg_replace('/' . $sEsc_File . ': \d+/s', $sFile . ': ' . ($iCounter + 1), $sData);
		//echo 'Changed: ' . $sNewData;
	}
	
	if ($sNewData!=='')
	{
		$fil = fopen($sCounterFile, w);
		fwrite($fil, $sNewData);
		fclose($fil);
	}
?>

При запуске скрипта:
Код:
.../Download.php?file=AutoIt/SIP.zip
В файл Counter.dat записывается счётчик для каждого скачиваемого файла.

Вот мне нужно это доработать, нужно получать с этого файла счётчик для указанного файла и генерировать его в изображение, чтобы я мог выложить счётчик отдельно в виде обычного изображения.

Кто что знает по теме?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,483
Вот, вроде сделал:

PHP:
<?php
	$sCounterFile = 'Downloads_Counter.dat'; 		// Counter file to hold the all counters for passed file as argument
	$sFilesServer = 'http://creator-lab.ucoz.ru'; 	// Server to download the files from. Can be empty, in this case the "file=" argument should contain full path to the file on server
	
	$sFile = $_GET['file'];
	
	if ($sFile == '')
		exit;
	
	header('Location: ' . $sFilesServer . '/' . $sFile);
	
	$hFile = fopen($sCounterFile, r);
	$sData = fread($hFile, filesize($sCounterFile)); 
	fclose($hFile);
	
	$sEsc_File = str_replace('/', '\/', preg_quote($sFile));
	$sFileName = preg_replace('/^.*\//', '', $sFile);
	$iCounter = preg_replace('/.*?' . $sEsc_File . ': (\d+).*?/s', '$1', $sData);
	
	if ($iCounter==Null || $iCounter==$sData)
	{
		$sNewData = $sData . $sFile . ": 1\r\n";
		//echo 'Added: ' . $sNewData;
	}
	else
	{
		$sNewData = preg_replace('/' . $sEsc_File . ': \d+/s', $sFile . ': ' . ($iCounter + 1), $sData);
		//echo 'Changed: ' . $sNewData;
	}
	
	if ($sNewData!=='')
	{
		$hFile = fopen($sCounterFile, w);
		fwrite($hFile, $sNewData);
		fclose($hFile);
		
		CreateCounterImage($sFileName, $iCounter);
	}
	
	function CreateCounterImage($sImgName, $iCounter)
	{
		//Set the image width and height
		$iWidth = 30;
		$iHeight = 20;
		
		//Create the image resource
		$hImage = ImageCreate($iWidth, $iHeight);
		
		//We are making four colors, white, black, red and gray
		$iWhite_Color = ImageColorAllocate($hImage, 255, 255, 255); 
		$iBlack_Color = ImageColorAllocate($hImage, 0, 0, 0);
		$iRed_Color = ImageColorAllocate($hImage, 255, 0, 0);
		$iGray_Color = ImageColorAllocate($hImage, 204, 204, 204);
		
		//Make the background white
		ImageFill($hImage, 0, 0, $iWhite_Color);
		
		//Add our counter in red to the image
		ImageString($hImage, 5, 13, 1, (int)$iCounter . '', $iRed_Color); //Plain image
		
		//Tell the browser what kind of file is come in
		header("Content-Type: image/png");
		
		//Output the newly created image in png format to a file
		ImagePng($hImage, $sImgName . "_CntrImg.png");
		
		//Free up resources
		ImageDestroy($hImage);
	}
?>

При каждом скачивании файла генерируется/обновляется изображение со счётчиком.
Это позволяет оставлять счётчик в виде изображения на разных форумах.
Было бы конечно проще не писать в файл, а сразу в поток, т.е можно было бы обойтись одним указанием параметра вместо указания файла изображения, типа «Download.php?file=...&image=1», но не везде разрешён php скрипт в тегах форума, например на оф. форуме это запрещено.

Пример реализации (использования) тут.


P.S.
Делал я это всё по одной причине, у меня уже не хватает выделенной мне квоты на оф. форуме чтобы заливать туда файл, и к тому же это намного удобное, таким образом можно оставлять на разных форумах одну и ту же ссылку (точнее две, вторая на изображение), и счётчик закачек будет считываться с одного места.
 
Верх