создание счетчика скачивания файла

kastaneda19

Новичок
Всем добрый день ! ) Стоит задача написания счетчика скачивания файла при нажатии на его ссылку и как в частном случае как сделать вызов функции header (с помощью нее качается данный файл) корректным чтобы при скачивании файлов не выдавалась ошибка 129 Warning: Cannot modify header information - headers already sent by (output started at /var/www/***/inc/menu_top.php:24) in /var/www/***/docs/incdoc.php on line 8
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Код в студию, пока что у тебя он неверный.
 

kastaneda19

Новичок
Код в студию, пока что у тебя он неверный.
PHP:
<?
function file_download($filename) {
    $location='docs/lib2/'.$filename;
// Проверяем существование файла
  if (file_exists($location)) {
    echo "129";
    $result = mysql_query("UPDATE doc SET fviews=fviews+1 WHERE ffile='".$filename."'");
    header('Location: [url]http://aviamettelecom.ru/'.$location);[/url]
  } else {
// Если файл не найден, сообщаем клиенту об этом через заголовки HTTP
    header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
    header('Status: 404 Not Found');
  }
// Прерываем дальнейшее выполнение скрипта, чтобы не отправлять мусор в ответе клиенту
  exit;
} ?>

.........................................


if($row['fstatus'] == 1)
						{

							        // echo LIB . $row['ffile'];
                                    if($_GET['counts']==1){ file_download($_GET['ffile']);}

							if(USER_LOGGED)
							{
								?>
								<td colspan="3">
									Служебный
									<a href="<? '[url]http://aviamet-telecom.ru/?id_top=6&counts=1&ffile='.$row['ffile'];[/url] ?>">
									<!-- <a href="<?php echo LIB . $row['ffile']; ?>"> -->
										<img src="../img/open.png" border="0">
									</a>
									<?php
									//~~~~~ нужен файл без расширения ~~~~~~~~~~
									//----- длина файла без 4-х символов
									$ln = strlen($row['ffile'])-4;
									//----- имя файла без точки и расширения (4-е символа)
									$fl = substr($row['ffile'], 0, $ln);
									//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
									?>
								</td>
								<?php
							}
else
							{
								?>
								<td colspan="3">
									Служебный
									<a href="?id_top=7" title="авторизация">
										<img border="0" src="../img/k16.png" />
									</a>
								</td>
								<?php
							}
						}
						else
						{
							?>
							<td colspan="3">
								Общий 111 <? echo LIB . $row['ffile']; ?>
								<a href="<? echo '[url]http://aviamet-telecom.ru/?id_top=6&counts=1&ffile='.$row['ffile'];[/url] ?>">  <!-- onclick="inc($row['findex']);" -->
									<img src="../img/open.png" border="0">
								</a>
								<?php
								//~~~~~ нужен файл без расширения ~~~~~~~~~~~~~~
								//----- длина файла без 4-х символов
								$ln = strlen($row['ffile'])-4;
								//----- имя файла без точки и расширения (4-е символа)
								$fl = substr($row['ffile'], 0, $ln);
								//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
								?>
							</td>
							<?php
						}
						?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Beavis
Чтобы понятно человеку ткнуть, что до хедера нельзя выводить ничего в выходной поток

kastaneda19
echo "129"; < зачем?

PS: Для оформления кода есть теги [ php ] (без пробелов)
 

Beavis

Banned
Beavis
Чтобы понятно человеку ткнуть, что до хедера нельзя выводить ничего в выходной поток
если просто ткнуть, то это будет не понятно (потому что не понятно почему именно нельзя)
пусть лучше прочитает статью по ссылке и сам всё поймет
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Beavis
я бы не надеялся на это
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
kastaneda19
Ссылку, что дал Beavis читал?
 

kastaneda19

Новичок
читал ... но там по ходу написания этот файл из которого фрагмент (в смысле doc.php) вызывается из index.php а там уже выше прописан заголовок ... как обойти это ... вот еще привожу код index.php
PHP:
<?php
session_start();
	/**
	* конфигурационный файл с константами
	*/
	include'config.php';
	
	/**
	* general function
	*		getInfo()
	*		reDirect()
	*/
	include'default.php';
	
	/**
	*
	*/ 
	include'variables.php';
//--- устанавливаем время жизни сессии -----------------------------------------
$time_out = 120; //--- секунд или 2 минуты
$_SESSION['by'] = time() + $time_out;

//------------------------------------------------------------------------------
//--- подключаемся к базе данных -----------------------------------------------
include ('inc/mysql.php');
//--- проверяем пользователя на авторизацию ------------------------------------
include ('auth/auth.php');

//------------------------------------------------------------------------------
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="[url]http://www.w3.org/1999/xhtml[/url]" xml:lang="ru-ru" lang="ru-ru">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=utf-8" />
		<meta name="robots" content="index, follow" />
		<meta name="keywords" content="Авиаметтелеком, метеообслуживание, СГМО, СГМИ, АМО, авиаметеорология" />
		<meta name="description" content="Авиаметтелеком - главный центр информационных технологий и метеорологического обслуживания авиации" /> 
	
		<title>Авиаметтелеком Росгидромета</title>

		<link rel="stylesheet" href="css/style.css" type="text/css" />
		<link rel="stylesheet" href="bbcode/bbcode/styles/style.css" type="text/css" />
		
		<script type="text/javascript" src="bbcode/bbcode/js/bb.js"></script>
		<script type="text/javascript" src="bbcode/bbcode/js/modalbox.js"></script>
	</head>
	<body style="background-color: #ffffff;">
		<?php
		/*
		*
		*/ 
		include ('inc/header.php'); 
		
		/*
		* модуль для работы с базой данных
		* функции:
		*		mysqlQuery()
		*		escapeString()
		*/	
		include 'libs/mysql.php';
		
		/*
		*
		*/
		include 'libs/view.php';
		
		/*
		* модуль работы с меню
		* функции:
		* 		menuList()
		* 		filialShow()
		*/
		include 'libs/menu.php';		
		?>

		<table style="width:100%;">
		<tr>
			<td align="center">
				<table width="1000px" border="0">
					<tr>
						<td width="245px" valign="top" align="right">
							<?php include ('inc/menu_left.php'); ?>
						</td>
						<td width="5px">
						<!--//-->
						</td>
						<td width="500px" valign="top" style="margin:10px 10px 10px 10px">
							<?php
							if(isset($_GET['id_top']))
							{
								$id_top = (int)$_GET['id_top'];
								switch ($id_top)
								{//--- start switch block
				/**
				* главная страница
				*/					
				case 0:
					$label = 'Главная';
					include'tpl/label.tpl';
				
					include ('inc/main.php');
				break;
				/**
				* страница о нас
				*/
				case 1:
					$label = '<img src="img/logo_about72.png" hspace="10" align="absmiddle" />';
					$label .= 'О нас'; 
					include'tpl/label.tpl';
				
					include ('top/about.php');
				break;
				/*
				* страница контакты
				*/
				case 2:
					$label = 'Контакты';
					include'tpl/label.tpl';
					//--- получим список отделов
					$dep = mysqlQuery("SELECT * FROM `dep` WHERE `fowner`=48");
					/*
					* получим список сотрудников
					*/
					//--- определим индекс выбранного отдела
					$ind = isset($_GET['dep']) ? (int)$_GET['dep'] : 0;
					//--- запрос персонала по выбранному отделу
					$per = mysqlQuery
					("
						SELECT 	`p`.`fname` AS `fio`,
								`p`.`fphoto1` AS `photo1`,
								`p`.`fphone1` AS `phone1`,
								`p`.`femail1` AS `email1`,
								`p`.`fskype`  AS `skype1`,
								`j`.`fname` AS `post` 
						FROM 	`per` AS `p`, 
								`job` AS `j` 
						WHERE 	`p`.`fdep`='".$ind."' 
						AND 	`p`.`fjob`=`j`.`findex`
					");										
															
					$shw = '';
					if(mysql_num_rows($per) > 0)
					{
						$tpl = getTpl('tpl/persona');
						//$tpl = getTpl('admin/per_adm');
						while($rows = htmlChars(mysql_fetch_assoc($per)))
						{
							$shw .= parseTpl($tpl, $rows);
						}
					}	
	
					include'top/cont.php';
					//--- предупреждение
					include'tpl/warning.tpl';
				break;
				/**
				*
				*/
				case 4:
					$label = '<img src="img/news48.png" hspace="10" align="absmiddle" />';
					$label .= 'Новости';
					include'tpl/label.tpl';	
				
					include ('news/news.php');
				break;
				/**
				*
				*/
				case 5:
					include ('top/forum.php');
				break;		
				/**
				*
				*/
				case 6:
					$label = '<img src="img/doc48.png" hspace="10" align="absmiddle" />';
					$label .= 'Документы';
					include'tpl/label.tpl';	
				
					include ('docs/doc.php');
				break;
				
                                          ********************
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
kastaneda19
До того как ты используешь header() не должно быть ничего выведено, ни одного символа, ни пробела, понимаешь? Ссылку не зря дали, иди читай.
 

kastaneda19

Новичок
а если не задействовать для скачивания файла header то можно как-нибудь по другому ?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
kastaneda19
прямой ссылкой
 

kastaneda19

Новичок
а в нее можно вставить php код который инкрементирует счетчик скачиваний в базе данных ?
 

kastaneda19

Новичок
просто если index править то там его другой человек делает а там все заголовки и прописаны
 

AmdY

Пью пиво
Команда форума
kastaneda19
этот счётчик в php коде вовсе не нужен, достаточно просто парсить лог веб сервера и считать количество переходов на файл.
 
Сверху