Помогите написать скрипт на php!

123
izbushka
На сайте с 08.06.2007
Offline
110
#11
an4oys228:
Ну да, будет большое кол-во запросов. Бывало сайт доходил до 80к уников в день

Существует миллион решений вашей задачи. И правильно ее решить, не зная логики работы вашего сайта, сервера и доступных вам инструментов, невозможно.

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#12

ну закидывайте в папку файлики с рандомным названием и считайте их, когда будет 1000 чистим папку и меняем значения.

А так хз, в чём проблема. ТС вы хотите, чтобы за вас написали или какие-то сложности в разработке и выборе метода решения?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
A
На сайте с 08.07.2010
Offline
25
#13

На файлах алгоритм решения вашей задачи выглядит так:

<?  

$count = (int)file_get_contents('counter.txt'); // Читаем текущее значение счётчика
$keys = file('keys_db.txt'); // Читаем базу ключей
if($count < 1000){
$count++; // Если счётчик меньше тысячи, то просто увеличваем его
}else{
$count = 0; // Если достигли 1000 посещений, то обнуляем счётчик
$keys = array_slice($keys,1); // Удаляем из базы ключей верхний ключ
$h = fopen('keys_db.txt','w+'); // Сохраняем обновлённую базу ключей
fwrite($h,implode('',$keys));
fclose($h);
}

$h = fopen('counter.txt','w+'); // Обновляем счётчик
fwrite($h,$count + 1);
fclose($h);

$Key = trim(array_shift($keys)); // Получаем текущий ключ
?>

Но если предполагается большая посещаемость, то файлам доверять нельзя из-за низкой скорости работы с диском и, как уже отмечали выше, проблем с блокировками (два процесса могут одновременно ломиться в один файл для обновления счётчика и/или чтения базы ключей, что рано или поздно приведёт к коллизиям).

Здесь нужно счётчик и базу выносить либо в реляционную (mysql), либо (что логичнее) в key-value БД (типа redis, memcache и т.д.). Тогда всех вышеперечисленных проблем можно збежать.

A4
На сайте с 24.09.2013
Offline
60
#14
LEOnidUKG:
ну закидывайте в папку файлики с рандомным названием и считайте их, когда будет 1000 чистим папку и меняем значения.
А так хз, в чём проблема. ТС вы хотите, чтобы за вас написали или какие-то сложности в разработке и выборе метода решения?

Я бы хотел, чтобы написали. А то я не знаю ни чего в этом. Писал человек другой, а он пропал... Так и не доделал сайт

Seo технологии рулят =)
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#15
an4oys228:
Я бы хотел, чтобы написали. А то я не знаю ни чего в этом. Писал человек другой, а он пропал... Так и не доделал сайт

Ну тогда создавайте в соответствующем разделе топик, описывайте детально задачу и появятся исполнители.

izbushka
На сайте с 08.06.2007
Offline
110
#16
axxil:
На файлах алгоритм решения вашей задачи выглядит так:

Явыне недостатки:

1. Вы каждый раз читаете и пишет 2 файла. Можно спокойно ограничиться 1.

2. Ключи удаляются из файла. Что будет когда они закончатся?

И это даже не говоря про посещаемость в 80к хостов..

A4
На сайте с 24.09.2013
Offline
60
#17
axxil:
На файлах алгоритм решения вашей задачи выглядит так:

<?  
$count = (int)file_get_contents('counter.txt'); // Читаем текущее значение счётчика
$keys = file('keys_db.txt'); // Читаем базу ключей
if($count < 1000){
$count++; // Если счётчик меньше тысячи, то просто увеличваем его
}else{
$count = 0; // Если достигли 1000 посещений, то обнуляем счётчик
$keys = array_slice($keys,1); // Удаляем из базы ключей верхний ключ
$h = fopen('keys_db.txt','w+'); // Сохраняем обновлённую базу ключей
fwrite($h,implode('',$keys));
fclose($h);
}

$h = fopen('counter.txt','w+'); // Обновляем счётчик
fwrite($h,$count + 1);
fclose($h);

$Key = trim(array_shift($keys)); // Получаем текущий ключ
?>


Но если предполагается большая посещаемость, то файлам доверять нельзя из-за низкой скорости работы с диском и, как уже отмечали выше, проблем с блокировками (два процесса могут одновременно ломиться в один файл для обновления счётчика и/или чтения базы ключей, что рано или поздно приведёт к коллизиям).

Здесь нужно счётчик и базу выносить либо в реляционную (mysql), либо (что логичнее) в key-value БД (типа redis, memcache и т.д.). Тогда всех вышеперечисленных проблем можно збежать.

Спасибо скрипт работает, но в counter.txt прибавляет сразу по +2 было 2, обновил страницу стало 4 и тд. Хотя с эти решил проблему. Сам смог понять ))

И возможно ли сделать чтобы ключи не удалялись, а просто переходили в низ на строку. И если дошли до последнего ключа, до возвращаемся к первому ключи и так далее продолжать

A
На сайте с 08.07.2010
Offline
25
#18
izbushka:

1. Вы каждый раз читаете и пишет 2 файла. Можно спокойно ограничиться 1.
2. Ключи удаляются из файла. Что будет когда они закончатся?

1. Покажите пример, плиз.

2. Вопрос пополнения базы ключей оставлен за скобками, так как ТС сказал что ключ берутся откуда-то со стороннего ресурса.

И это даже не говоря про посещаемость в 80к хостов..

Предлагаю вам дочитать моё сообщение до конца.

izbushka
На сайте с 08.06.2007
Offline
110
#19
axxil:
1. Покажите пример, плиз.

Я показал пример в одном из первых постов, смотрите выше.

A
На сайте с 08.07.2010
Offline
25
#20
И возможно ли сделать чтобы ключи не удалялись, а просто переходили в низ на строку. И если дошли до последнего ключа, до возвращаемся к первому ключи и так далее продолжать

Можно. Замените

<?
$keys = array_slice($keys,1); // Удаляем из базы ключей верхний ключ
?>

на

<?
$old_key = array_shift($keys);
array_push($keys,$oldkey);
?>


---------- Добавлено 24.09.2013 в 16:27 ----------

Я показал пример в одном из первых постов, смотрите выше.

Там вы смешиваете счётчик и файл данных. Это лишает программу гибкости.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий