За последние 24 часа нас посетили 30492 программиста и 1792 робота. Сейчас ищет 1141 программист ...

Не могу найти ошибку в логике скрипта

Тема в разделе "PHP для новичков", создана пользователем metadon, 22 янв 2008.

  1. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Здравствуйте.

    Скрипт из файла id.txt с первой строчки берёт значение (часы) и сравнивает их с временем (часы) на момент запуска скрипта, если эти данные равны то функция возвращает данные из файла которые находиться на второй строчке файла, если часы не совпадают, то в файл записывается час(когда скрипт был запущен) и генерируется новое число и возвращается новое сгенерированное число и тоже записывается в файл.

    Смысл в том, что при смене часа функция возвращает новое число, и если скрипт запустить в течение этого часа, то число не измениться, а измениться только тогда когда измениться час.

    Скрипт почему-то всегда возвращает новое число.


    PHP:
    1. <?php
    2.  
    3.     function get_id()
    4.     {
    5.         $h = date("H");
    6.         $f = file("id.txt");
    7.  
    8.         if($h == $f[0])
    9.         {
    10.             return $f[1];
    11.         }
    12.         else
    13.         {
    14.             $f = fopen("id.txt","w+");
    15.             $rand = rand(1, 4777);
    16.  
    17.             fwrite($f, $h."\n");
    18.             fwrite($f, $rand);
    19.  
    20.             return $rand;
    21.         }
    22.  
    23.         fclose($f);
    24.     }
    25.  
    26.     echo get_id();
    27. ?>
     
  2. Adil

    Adil Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    280
    Симпатии:
    0
    думай над этой частичкой кода...

     
  3. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Думал ещё до твоего поста, если ты насчёт сравнения то я пробывал разные варианты (=, ==, ===) не помогает
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    1. Это не знак сравнения. Это знак присвоения.
    При операторе сравнения "===" условие должным образом работать не будет, т.к. число, прочитанное из файла - строка.
    Странно, обычно при сравнении знаком "==" числа и число-строки, выдается true, но не в этом варианте.
    Обычно ("1" == 1) - true
    Поэтому тут нужно приводить типы - а именно:
    2. fclose($f); должен находиться в блоке else
     
  5. Adil

    Adil Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    280
    Симпатии:
    0
    Kreker

    здесь оба: $f[0] и $h являются строками...
     
  6. Adil

    Adil Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    280
    Симпатии:
    0
    блин или нет... хммм... стойте... я в замешательстве )
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А кто будет переводы строк убирать?
    Или trim или приведение типов.
     
  8. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    Спасибо за подсказку, скрипт заработал.

    PHP:
    1. <?php
    2.  
    3.     function get_id()
    4.     {
    5.         $h = date("i");
    6.         $f = file("id.txt");
    7.         $f[0] = str_replace("\n", NULL, $f[0]);
    8.  
    9.         if($h == $f[0])
    10.         {
    11.             return $f[1];
    12.         }
    13.         else
    14.         {
    15.             $f = fopen("id.txt","w+");
    16.             $rand = rand(1, 4777);
    17.  
    18.             fwrite($f, $h."\n");
    19.             fwrite($f, $rand);
    20.  
    21.             fclose($f);
    22.  
    23.             return $rand;
    24.         }
    25.     }
    26.  
    27.     echo get_id();
    28.  
    29. ?>
     
  9. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0