Скрипт работает через раз

Тема в разделе "Как сделать...", создана пользователем HENRI, 24 авг 2013.

  1. HENRI

    HENRI Создатель

    Регистр.:
    17 янв 2013
    Сообщения:
    13
    Симпатии:
    6
    Я создал скрипт, который записывает в файл название карты и количество раз ее появления (мониторинг серверов). Данный скрипт проверяет текущую карту, если ее нету в списке оно добавляет строку, если есть, то скрипт удаляет данную строку и вместо нее записывает точно такую же, только увеличивает на 1 количество раз.
    Проблема вот в чем(показываю содержимое самого файла .txt) :
    Код:
    ['zm_mansion_mba',3],
    ['zm_dust2snow_2011',1],
    ['zm_303',13],
    ['zm_3rooms',7],
    ['zm_nuke',9],
    ['zm_fdust2x2',2],
    ['zm_fdust2x2',2],
    ['zm_fdust2x2',2],
    ['zm_inferno',8],
    ['zm_china',20],
    ['zm_chaves2_click21',1],
    ['zm_chaves2_click21',1],
    ['zm_chaves2_click21',1],
    ['zm_chaves2_click21',1],
    ['zm_chaves2_click21',2],
    ['zm_chaves2_click21',1],
    ['zm_chaves2_click21',1],
    ['zm_chaves2_click21',1],
    ['zm_chaves2_click21',1],
    ['cs_italy32',11],
    Вот сам скрипт:
    Код:
    $map = "/* карта определяеться другим скриптом, но он 100% рабочий */";
    
    $file_map = file("map/".$id.".txt");
                for ($a = 0; $a < count($file_map); $a++)
                {
                    $count_map = substr($file_map[$a], 2);
                    $count_map = explode("',", $count_map);
                    if ($count_map[0] == $map)
                    {
                        unset($file_map[$a]);
                        $map_count = substr($count_map[1], 0, -3);
                        file_put_contents("map/".$id.".txt", implode("", $file_map));
                        $map_count++;
                        file_put_contents("map/".$id.".txt", file_get_contents("map/".$id.".txt")."['".$map."',".$map_count."],\n");
                    }
                    else
                    {
                        file_put_contents("map/".$id.".txt", file_get_contents("map/".$id.".txt")."['".$map."',1],\n"); //$id - это номер сервера
                    }
                }
    То есть скрипт при прохождении по файлу (к примеру текущая карта "de_dust2"), видит совпадение и должен увеличить число (['zm_chaves2_click21',1],), а он иногда увеличивает, а иногда при совпадении повторяет строку
     
    Последнее редактирование: 25 авг 2013
  2. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    PHP:
    $map_name 'zm_chaves2_click211';
    $file_path '_.txt';

    $f file$file_path );

    $found false;
    for( 
    $i=0$c=sizeof$f ); $i<$c; ++$i ){
        
    $line $f$i ];

        if( 
    false !== strstr$line"'" $map_name "'" ) ){

            
    $found true;

            
    preg_match'~,(\d+)\]~'$line$cnt );

            
    $f$i ] = "['" $map_name "'," . ( $cnt[1] + ) . "]," PHP_EOL;
        }
    }

    if( ! 
    $found ){

        
    $fsizeof$f ) ] = PHP_EOL  "['" $map_name "',1],";
    }

    file_put_contents$file_pathimplode''$f ) );
     
    Последнее редактирование модератором: 26 авг 2013
    HENRI нравится это.
  3. HENRI

    HENRI Создатель

    Регистр.:
    17 янв 2013
    Сообщения:
    13
    Симпатии:
    6
    Спасибо, а в чем проблема была с моим кодом, почему он через раз работал?