[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: создание счетчика скачивания файла
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



Спустя 1 минута, 26 секунд (5.07.2012 - 15:55) walerus написал(а):
kastaneda19 Было бы неплохо еще скрипт показать ), а в основном правило, НЕ выводить никакой информации до header а

Спустя 14 минут, 27 секунд (5.07.2012 - 16:09) kastaneda19 написал(а):
Цитата (walerus @ 5.07.2012 - 12:55)
kastaneda19 Было бы неплохо еще скрипт показать ), а в основном правило, НЕ выводить никакой информации до header а

<?
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);]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="<? 'http://aviamet-telecom.ru/?id_top=6&counts=1&ffile='.$row['ffile']; ?>">
<!-- <
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 'http://aviamet-telecom.ru/?id_top=6&counts=1&ffile='.$row['ffile']; ?>"> <!-- 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
}
?>

Спустя 1 минута, 20 секунд (5.07.2012 - 16:11) inpost написал(а):
Тебе ответили, отправлять заголовки можно только до вывода любой информации на экран!

Спустя 3 минуты, 49 секунд (5.07.2012 - 16:14) kastaneda19 написал(а):
Цитата (inpost @ 5.07.2012 - 13:11)
Тебе ответили, отправлять заголовки можно только до вывода любой информации на экран!

ну это понятно что только до вывода - но в том то и весь махач балета как это обойти и вызвать скачивание файла в любом месте скрипта

Спустя 1 минута, 1 секунда (5.07.2012 - 16:15) kastaneda19 написал(а):
Цитата (kastaneda19 @ 5.07.2012 - 13:14)
Цитата (inpost @ 5.07.2012 - 13:11)
Тебе ответили, отправлять заголовки можно только до вывода любой информации на экран!

ну это понятно что только до вывода - но в том то и весь махач балета как это обойти и вызвать скачивание файла в любом месте скрипта

можно даже и другими птуями, не обязательно через header )))

Спустя 11 секунд (5.07.2012 - 16:16) inpost написал(а):
переадресация на НОВУЮ страницу, и на новой странице отдавать файл на скачивание.

Спустя 1 час, 41 минута, 55 секунд (5.07.2012 - 17:58) walerus написал(а):
kastaneda19 Это либо не весь код, либо что это за WTF ???, у тебя редактор кода не подсвечивает "ошибки" ?, у меня все в "радуге" стало почему то, после внесения твоего кода...

<?
function
file_download($filename)
{
$location='docs/lib2/'.$filename;

// Проверяем существование файла
if ( file_exists( $location ) )
{
$result = mysql_query( "UPDATE doc SET fviews=fviews+1 WHERE ffile='" . $filename . "'" );
header( 'Location: http://aviamettelecom.ru/' . $location)
}
else
{
// Если файл не найден, сообщаем клиенту об этом через заголовки HTTP
header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
// header( 'Status: 404 Not Found' );
}

// Прерываем дальнейшее выполнение скрипта, чтобы не отправлять мусор в ответе клиенту
exit;
}

// .........................................

// ГДЕ ОБЪЯВЛЯЕТСЯ ЭТО - USER_LOGGED ??????



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

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

if( USER_LOGGED )
{
?>
<td colspan="3">
Служебный
<a href="http://aviamet-telecom.ru/?id_top=6&counts=1&ffile=<?php echo $row['ffile']; ?>">
<?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 <?php echo LIB . $row['ffile']; ?>
<a href="http://aviamet-telecom.ru/?id_top=6&counts=1&ffile=<?php echo $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
}
?>
Можно как то так оформлять код? Исправил основные ошибки которые были в функции.

Спустя 3 часа, 58 минут, 13 секунд (5.07.2012 - 21:56) Guest написал(а):
USER_LOGGED - объявлен в другом файле

Спустя 3 минуты, 27 секунд (5.07.2012 - 21:59) kastaneda19 написал(а):
USER_LOGGED - объявлен в другом файле

а этот файл doc.php вызывается из index.php привожу сначала index.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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 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;
/**
* вход через авторизацию
*/
case 7:
$label = 'Авторизация';
include'tpl/label.tpl';

include ('auth/enter.php');
if(USER_LOGGED && $UserSts == 10)
{
echo '<a href="index.php?id_top=8">Регистрация</a>';
}
break;
case 8:
$label = 'Регистрация';
include'tpl/label.tpl';
//---
include'auth/reg.php';
//---
include'auth/reg.tpl';
break;

/**
* админка
* редактор новостей
*/
case 14:
if(USER_LOGGED)
{
include('news/newa.php');
}
else
{
include ('auth/enter.php');
}
break;
/*
* админка
* редактор библиотеки документов
*/
case 16:
if(USER_LOGGED)
{
include 'docs/doca.php';
}
else
{
include 'auth/enter.php';
}
break;
case 17: //---- справочники
//include('test/timer.php');
break;
case 18: //---- тестовый таймер обновления страницы
include('test/timer.php');
break;
/*
************************************************
******* МЕТОДИЧЕСКАЯ РАБОТА ********************
************************************************
/**
* приказы, распоряжения
*/

Спустя 35 секунд (5.07.2012 - 22:00) kastaneda19 написал(а):
а вот тут полностью doc.php

<script type="text/javascript">
function inc()
{

}
</script>
<?
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: http://aviamettelecom.ru/'.$location);
} else {
// Если файл не найден, сообщаем клиенту об этом через заголовки HTTP
header($_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
header('Status: 404 Not Found');
}
// Прерываем дальнейшее выполнение скрипта, чтобы не отправлять мусор в ответе клиенту
exit;
} ?>
<?php
//--- количество документов в базе
$res_count = mysqlQuery("SELECT count(*) AS `c` FROM `doc`");
$row_count = mysql_fetch_array($res_count);
$count = $row_count['c'];
?>
<table id="shapka" border="0" style="font-size:80%">
<tr>
<td>
сейчас в базе
<i>
<font size="5" color="#172983">&nbsp;<?php echo $count; ?>&nbsp</font>
<font size="5" color="#3c719d">документов</font>
</i>
</td>
</tr>
<tr>
<td>
<?php
if(!USER_LOGGED)
{
if(isset($_GET['auth']) == 6)
{
include('auth/enter.php');
}
}
?>
</td>
</tr>
</table>
<br />
<?php
$result = mysqlQuery("
SELECT `d`.*, `c`.`fname` AS `cname`
FROM `doc` AS `d`, `catalog` AS `c`
WHERE `d`.`ftype`=`c`.`findex`
ORDER BY `d`.`fdate` DESC
");
//$result = mysql_query($query) or die(mysql_error());
$colors = array("#c7f69c","#f0f0f0");
$c = 0;
$num = 1;
while ($row = mysql_fetch_array($result))
{
?>
<div style="position:relative;height:60px;">
<div style="position:absolute;width:12px;height:60px;left:0px;background:url('img/ban2_l.png') no-repeat;"></div>
<div style="position:absolute;width:445px;height:60px;left:12px;background:url('img/ban2_c.png') repeat-x;padding:5px 0px 0px 0px;
font-family:Tahoma,Verdana,Arial;font-size:80%;text-align:left;">
<?php echo $num++ . '.&nbsp;' . $row['fname']; ?>
</div>
<div style="position:absolute;width:12px;height:60px;left:457px;background:url('img/ban2_r.png') no-repeat;"></div>
</div>
<div style="position:relative;margin:3px 0px 0px 0px;">
<table cellspacing="1" id="doc">
<tr id="news_prosmotr">
<td align="center">

</td>
<td width="200px">
Дата размещения:
</td>
<td colspan="3">
<?php echo date("d.m.y", $row['fdate']); ?>
</td>
</tr>
<tr id="news_prosmotr">
<td>
</td>
<td>
Тип документа:
</td>
<td colspan="3">
<?php echo $row['cname']; ?>
</td>
</tr>
<tr id="news_prosmotr">
<td>
</td>
<td>
Статус:
</td>
<?php
if($row['fstatus'] == 1)
{

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

if(USER_LOGGED)
{
?>
<td colspan="3">
Служебный
<a href="<? 'http://aviamet-telecom.ru/?id_top=6&counts=1&ffile='.$row['ffile']; ?>">
<!-- <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 'http://aviamet-telecom.ru/?id_top=6&counts=1&ffile='.$row['ffile']; ?>"> <!-- 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
}
?>
</tr>
<tr id="news_prosmotr">
<td>
</td>
<td>
Формат файла:
</td>
<td colspan="3">
<?php echo substr($row['ffile'],-3); ?>
</td>
</tr>
<tr id="news_prosmotr">
<td>
</td>
<td>
Размер файла:
</td>
<td colspan="3">
<?php echo filesize(LIB . $row['ffile']); ?> байт
</td>
</tr>
</table>
</div>
<br />
<?php
}
?>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.