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

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],), а он иногда увеличивает, а иногда при совпадении повторяет строку
 
Последнее редактирование:
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] + 1 ) . "]," . PHP_EOL;
    }
}

if( ! $found ){

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

file_put_contents( $file_path, implode( '', $f ) );
 
Последнее редактирование модератором:
Спасибо, а в чем проблема была с моим кодом, почему он через раз работал?
 
Назад
Сверху