Спецы по PHP, объясните, почему так происходит?

Тема в разделе "PHP программирование", создана пользователем vitfil, 4 окт 2004.

  1. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Люди, расскажите, чего я не понимаю в этой жизни?
    Делаю скрипт для скачивания файлов с моего сайта с указанием количества раз скачивания:
    файл download.php
    Код (Text):
    <?
    $datafile="./download.dat";
    $goodlink=0;
    function show_count($idd){
    global $datafile;
    $db=file($datafile);
    foreach ($db as $dbd){
    list($fileid,$count,$url, $filename)=split("\|", $dbd);
    if ($fileid == $idd){
    $have=1;
    break;
    }
    }
    if (isset($have)){echo $count;}
    }
    function plusdown($idd){
    global $datafile;
    global $goodlink;
    if (isset($idd)){
    $x=0;
    $db=file($datafile);
    foreach ($db as $dbd){
    list($fileid,$count,$url, $filename)=split("\|", $dbd);
    if ($fileid==$idd){
    $have=1;
    break;
    }
    $x++;
    }

    if (!isset($have)){
    $goodlink=0;
    exit;
    }

    if (!is_file($url)){
    $goodlink=0;
    exit;
    }
    $count++;
    $db[$x]=$fileid."|".$count."|".$url."|".$filename;
    $fp=fopen ($datafile,"w");
    fwrite($fp,implode($db,""));
    fclose ($fp);
    $goodlink=1;
    }
    }
    if ($id!=0){
    plusdown($id);
    if ($goodlink=1){
    Header("Location: download.php?id=0&idf=$id");
    }
    }
    else if (isset($idf)){
    Header("Location: action.php?id=$idf"); //проблемная строка
    }
    ?>
    <br><a href="download.php?id=1">Скачать</a>
    (<b>скачиваний:
    <?
    show_count(1);
    ?> </b>)
    Файл action.php
    Код (Text):
    <?
    $datafile="./download.dat";
    if (isset($id)){
    $x=0;
    $db=file($datafile);
    foreach ($db as $dbd){
    list($fileid,$count,$url, $filename)=split("\|", $dbd);
    if ($fileid==$id){
    $have=1;
    break;
    }
    $x++;
    }
    header("Content-disposition: filename=".$filename);
    header("Content-type: application/octetstream");
    header("Pragma: no-cache");
    Header("Expires: 0");
    Header("Cache-Control: no-cache, must-revalidate");
    Header("Last-Modified: ".gmdate("D, d M Y H:i:s")."GMT");
    readfile($url);
    }
    ?>
    Далее...
    Ссылка на раздел скачиваний:
    <a href="download.php?id=0">Файлы</a>
    все проходит нормально.
    А теперь, внимание! Если комментируем проблемную строку, то скачивания не происходит (ессно), но страница закачек обновляется, т.е. перегружается с обновленным количеством скачиваний. Если проблемную строку разкомментировать, то файл скачивается, но обновления страницы закачек не происходит. Почему?
     
  2. admin

    admin Well-Known Member

    Регистрация:
    8 авг 2003
    Сообщения:
    2.811
    Симпатии:
    0
    vitfil
    потому что если header передан уже после того как браузеру пошли какие-то данные - он не выполнится.
    с функцией header надо работать осторожно. если ты перед ней например напишешь echo "hello world";, то уже она не передастся.
     
Загрузка...

Поделиться этой страницей