[Закрыть]
 
popoff.donetsk.ua
Всем нравится прекрасная лошадь, но почему-то совершенно нет желающих ею стать. /Августин/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Программирование на PHP - пауза в скрипте или обновление страници

пауза в скрипте или обновление страници

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Гость Сказочник url://forum.message:2733
пауза в скрипте или обновление страници
Сказочник

Суть проблемы в следующем:

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

Хостеры ругаются за большую нагрузку на mySQL сервер.

set_time_limit(0) - не разрешена на сервере.

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

ВОПРОС:
1. как сделать паузу через определенное количество проходов по циклу (дабы уменьшить нагрузку на mySQL сервер).
2. либо как перезапустить ту же страницу с новыми параметрами через определенный промежуток времени.

popoff
Yuri
Июл, 2004
Сообщений: 944
popoff url://forum.message:2735

Я использую у себя такую конструкцию:

<?php register_tick_function('_all_cron_trick');
  declare(
ticks=1);
?>

Функция _all_cron_trick у меня такая:

<?php function _all_cron_trick()
{
  global 
$all_info;

  if(
ALL_CRON_CPU<1||ALL_CRON_CPU>=100) return;

  
$i_time=_debug_microtime();
  if(
$i_time<$all_info['cron-time']+ALL_CRON_CPU/100.0*ALL_CRON_TICK) return;

  
$i_sleep=(100.0/ALL_CRON_CPU-1)*($i_time-$all_info['cron-time']);
  if(
$i_sleep>ALL_CRON_MAX$i_sleep=ALL_CRON_MAX;

  
usleep($i_sleep*1000000);
  
$all_info['cron-time']=_debug_microtime();
}
?>


функция _debug_microtime() возвращает текущее время в миллисекундах

константа ALL_CRON_CPU содержит число от 1 до 100, обозначающее процент загруженности процессора (100% - означает, что процессор можно грузить на 100%; 1% - означает, что процессор можно загружать только на 1%)

ALL_CRON_MAX - максимальное количество секунд для одного цикла ожидания. то есть, например, может получиться так, что функция _all_cron_trick() не вызывалась слишком долго и тогда $i_sleep будет очень большим. а нет смысла, с точки зрения нагрузки на процессор, простаивать, к примеру, больше 5 секунд - тогда ALL_CRON_MAX можно установить равным 5.


При этом правда, нужно заметить, что:
1. Во всех версиях Windows вызов declare() приводит к краху апача.
2. Крах апача также наступает во многих вариантах инсталляций *nix+PHP - это нужно проверять конкретно у Вашего хостера - у некоторых наступает крах, а у некоторых всё ок. Причём под *nix крах может быть неустойчивым (то есть, один раз вырубился апач, а один раз - всё ок). Но если крах не устойчивый, то выбрубается примерно в 50% вызовах - то есть, нужно пощёлкать несколько раз и посмотреть, если хотя бы раз вырубилось, значит не годится фишка для Вашего хостера.


Для теста на то, вызывает ли declare() крах системы, я использую такой файл:

requirement-declare.html (основной файл, его нужно вызывать)

<?php // public_html/prg/requirement-declare.html
// (c) Yuri Popoff, May 2008, popoff.donetsk.ua
// A script to show a bug in a PHP

// LICENSE-NOLICENSE

if(empty($_GET['auto']))
{
  echo 
'<p>Test <code>declare(ticks=1);</code></p><p>Valid reply: <b>123</b></p><p>Invalid reply: <b>1</b></p><p>This is an unstable error, so you SHOULD make many tries to ensure that a valid reply comes always.</p>Reply: ';
}

echo 
'1';flush();

include(
'requirement-declare.php');

echo 
'2';flush();

function 
_all_cron_trick()
{
  
// any function
}

register_tick_function('_all_cron_trick');
declare(
ticks=1);

echo 
'3';flush();

?>


Файл requirement-declare.php может быть абсолютно любым. В моём тесте он такой:

<?php // absoultely any file
?>
~~~~~ 27 Фев 2009, 17:25, спустя 3 минуты 33 секунды ~~~~~

Да, а ещё недавно я обнаружил инсталляцию апаче+РНР, под которой этот тест не выводит даже 1...

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Гинеколог, стоматолог, психотерапевт в Донецке