Intereting Posts
регулярное выражение для совпадающего числа и пробелов Создание простого события календаря Google в PHP PHP: копирование по записи и присваивание по ссылке выполняют разные действия на PHP5 и PHP7 Regex для проверки того, имеет ли строка несогласованные скобки? Как перевести метки в symfony2 с помощью messages.en.yml? неправильный параметр count для strstr () Неустранимая ошибка: допустимый размер памяти 134217728 байтов исчерпан (CodeIgniter + XML-RPC) Google App Engine – развернуть с ошибкой 1: неавторизованный Синхронизированные функции с использованием PHP Контроллер Laravel 5, отправляющий целое число JSON в виде строки Ошибка приоритета PHP-оператора? Синтаксис синтаксиса PHP-массива Ошибка анализа левой квадратной скобки " Ошибка phpMyAdmin: # 1054 – Неизвестный столбец 'systeem_eisen' в 'order clause' Не удалось загрузить ресурс: прервана загрузка кадра – Agian Проверяйте дубликаты перед вставкой

Как сохранить этот счетчик от реселлера на уровне 100 000?

Этот скрипт сбрасывается после 100 000. Что мне нужно изменить, чтобы предотвратить сброс и вместо этого продолжать подсчет?

<?php $filename1 = 'content/general_site_data/total_site_page_loads.txt'; if (file_exists($filename1)) { $fh = fopen("content/general_site_data/total_site_page_loads.txt", "a+"); if($fh==false) die("unable to create file"); $filec = 'content/general_site_data/total_site_page_loads.txt'; if (!is_writable($filec)) die('not writable'); $total_site_page_loads = trim(file_get_contents($filec)) + 1; fwrite(fopen($filec, 'w'), $total_site_page_loads); echo '------------------------------<br /> Site Wide Page Views: '.$total_site_page_loads.'<br />'; } else { $fh = fopen($filename1, "a"); $total_site_page_loads = trim(file_get_contents($filename1)) + 1; fwrite($fh, $total_site_page_loads); fclose($fh); echo '------------------------------<br /> Site Wide Page Views: '.$total_site_page_loads.'<br />'; } ?> 

Solutions Collecting From Web of "Как сохранить этот счетчик от реселлера на уровне 100 000?"

Ваш код может страдать от состояния гонки .

В середине пути вы снова открываете файл в режиме w , который обрезает файл до нулевой длины. Если откроется другая копия вашего скрипта и попытается прочитать файл, пока он был усечен, но до того, как он будет прочитан, счетчик будет сброшен до нуля.

Вот обновленная версия вашего кода:

  $filename = 'content/general_site_data/total_site_page_loads.txt'; // Open our file in append-or-create mode. $fh = fopen($filename, "a+"); if(!$fh) die("unable to create file"); // Before doing anything else, get an exclusive lock on the file. // This will prevent anybody else from reading or writing to it. flock($fh, LOCK_EX); // Place the pointer at the start of the file. fseek($fh, 0); // Read one line from the file, then increment the number. // There should only ever be one line. $total_site_page_loads = 1 + intval(trim(fgets($fh))); // Now we can reset the pointer again, and truncate the file to zero length. fseek($fh, 0); ftruncate($fh, 0); // Now we can write out our line. fwrite($fh, $total_site_page_loads . "\n"); // And we're done. Closing the file will also release the lock. fclose($fh); echo '------------------------------', '<br />Site Wide Page Views: ', $total_site_page_loads, '<br />'; 

Поскольку начальный открытый режим находится в режиме append-or-create, вам не нужно обрабатывать случай, когда файл не существует, если начальный открытый не сработал.

При блокировке файла этот код никогда не должен сбрасывать счетчик в файле, независимо от того, сколько одновременных запросов есть. (Если, конечно, у вас не будет другой записи кода в файл).

Я не вижу, где произойдет сброс, но как работает скрипт, кажется довольно простым. Возможно, попробуйте отредактировать total_site_page_loads.txt с чем-то вроде 99990 и посмотреть, что происходит с этим файлом при переходе на 100000 ?