вывод числа из диапозона по порядку - [php]

Тема в разделе "PHP", создана пользователем ufaclub, 29 авг 2011.

Модераторы: latteo
  1. ufaclub

    ufaclub

    Регистр.:
    1 май 2007
    Сообщения:
    394
    Симпатии:
    17
    есть диапозон [1-40]
    нужно выводить числа по порядку при каждой перезагрузки страницы

    например открыли страницу - вывелось число 1 - нажалаи перезагрузить страницу - вывелось число 2 .... и так далее по кругу до 40.
    потом снова 1

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

    подскажите на примере пшп только только изучаю.. на примере просто понятней было бы
     
  2. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Вот думаю подойдёт
    PHP:
    <?php
    $url 
    "count.txt";//Указываем адрес файла с данными для записи
    if (file_exists($url)==false)//если файла с данными не существует
    {
    $handle fopen($url"w");//открывая, создаем файл с данными
    $count 0;//устанавливаем значение счетчика на ноль
    fwrite($handle$count);//записываем значение счетчика
    fclose($handle);//закрываем файл
    }
    else
    //если существует
    {
    $file file($url);//Считываем файл в массив
    $count $file[0];//Первая строчка - наши данные, в php отсчет начинается с нуля
    }
    $count++;//Увеличиваем значение счетчика на 1
    if ($count== 40){ $count1;} // Если после увеличения число равно 40 сбрасываем на 1
    $handle fopen($url"w");//Открываем файл для записи
    fwrite($handle$count);//Записываем
    fclose($handle);//Закрываем
    echo "Просмотров $count";//Выводим данные счетчика
    ?>
     
  3. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    parks, твое решение = ололо :)
    PHP:
    <?php

    session_start
    ();

    if ( ! isset( 
    $_SESSION['counter'] ) OR $_SESSION['counter'] == 40 )
    {
        
    $_SESSION['counter'] = 1;
    }
    else
    {
        
    $_SESSION['counter']++;
    }

    echo 
    $_SESSION['counter'];
    ?>
    :)
     
  4. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Ололо - это твоя невнимательность , мой пример щитает общее количество просмотров , а твой конкретного юзера.(Так что кто ололо ещё под вопросом .)Просили простой пример реализации на файлах пожалуста.
     
    dimalyk нравится это.
  5. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    А так не проще?
    PHP:
    $url"count.txt"// адрес файла
    $handle fopen($url"a+"); //открываем файл для чтения и записи если файла нет, то созддаем новый
    $count=fgets ($handle); // вычитываем файл
    fclose($handle); //закрываем файл
    if(!$count){$count=0;} // проверяем на наличие записей, если записи нет, то присваиваем счетчику 0
    $count++; // повышаем счетчик
    if($count>40){$count=1;} // если счетчик перебрал значение, то сбрасываем его
    file_put_contents ($url$count); // перезаписываем файл
    echo "Просмотров: ".$count// выводим данные счетчика
     
  6. grey109

    grey109

    Регистр.:
    3 апр 2007
    Сообщения:
    176
    Симпатии:
    19
    Хорошо бы в последний код добавить блокировку - flock, чтобы не было проблем с одновременным доступом к файлу.
     
  7. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    ок :) а где тут написано, что для всех, а не для конкретного юзера? :)

    Насчет файлов - проглядел. Да, к твоему решению нужно добавить flock и можно (int) + file_get_contents() вместо if-else сделать.
     
  8. parks

    parks

    Регистр.:
    18 сен 2008
    Сообщения:
    421
    Симпатии:
    42
    Дак а я о чём , а ты сразу ололо.
    Здесь согласен , на быструю руку стряпал =)
     
  9. Yaggi Jah

    Yaggi Jah Постоялец

    Регистр.:
    15 ноя 2006
    Сообщения:
    75
    Симпатии:
    31
    Вариант с блокировкой:
    PHP:
    <?php
    $cnt
    =0;
    $file='count.txt';
    if(
    file_exists($file)) {
            
    $fp=fopen($file,'r');
            
    flock($fp,LOCK_SH);
            
    $cnt=(int)fgets($fp,4096);
            
    flock($fp,LOCK_UN);
            
    fclose($fp);
    }
    $cnt++;
    if(!
    file_exists($file)) {
            
    touch($file);
            @
    chmod($file,0666);
    }
    $fp=fopen($file,'r+');
    flock($fp,LOCK_EX);
    ftruncate($fp,0);
    rewind($fp);
    fwrite($fp,$cnt);
    flock($fp,LOCK_UN);
    fclose($fp);
    ?>