Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/33: Рейтинг темы: голосов - 33, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244

Как можно прервать выполнение цикла на определенное время?

08.09.2010, 08:52. Показов 7069. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
<?
$y=0;
for ($i=0; $i<100; $i++){
$y++;
if ($y==4){
# здесь нужно прервать цикл, скажем на 1 минуту...
$y=0;
}
}
?>
[/code]
Есть ли какая то команда типа фокпрошного wait timeout...?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2010, 08:52
Ответы с готовыми решениями:

Как можно прервать выполнение цикла?
Подскажите пожалуйста, как можно прервать выполнение цикла. Ситуация такая: допустим на форме есть 2 кнопки. По нажатию одной кнопки...

Прервать выполнение кода на определенное время
Добрый день! Есть ли в бейсике какой-то код, который бы заставил ждать определенное время, только потом продолжить выполнять код дальше?...

Как проверять, нажата ли клавиша Esc, в каждой итерации цикла, и если нажата, то прервать выполнение цикла?
OwenGlendower, это обращение прежде всего к вам. Вызов функции, в которой происходит проверка методом...

30
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
08.09.2010, 10:16
не мели чушь!
какой сервер-броузер будет ждать две минуты пока у тебя цикл закончится?!
На выполнение скрипта даётся определённое время, это время можно посмотреть в php.ini max_execution_time
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
08.09.2010, 11:23  [ТС]
Тогда подскажите как поступить? Есть список рассылки по клиентам компании (около 2000 адресов).
Я написал скрипт, который вызывается cron jobs и отправляет по этим адресам необходимые данные. Теперь вопрос: не посчитает ли сервер провайдера такое количество писем за спам? Хостеры мои плечами пожали - ничего вразумительного не смогли сказать. Скрипт работает так: сканируется список адресов, считал адрес - отправил данные, считал следующий адрес - отправил... и т.д. Поэтому я и решил сделать задержку, например отправил по 10 адресам - ждем (например 2-5 минут), следующая порция.
Раз нет такой команды, то несложную функцию можно прикрутить типа:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
echo 'Таймер запущен
';
function timer ($sek) {
    $CurrentTime=date('U');
    $NewTime=$CurrentTime+$sek;
    while ($CurrentTime<$NewTime){
        $CurrentTime=date('U');
    }
}
$sek=10;
timer($sek);
echo 'Прошло '.$sek.' секунд';
?>
Но исходя из значения max_execution_time, если я правильно понял, скрипт и без всякой задержки не отработает все адреса?
Что теперь делать? Разбивать список рассылки? На какие блоки? Как вообще это решается грамотно?
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
08.09.2010, 11:28
flush() - очищаем буфер
sleep(милисекунды) - приостанавливаем скрипт
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
08.09.2010, 12:25  [ТС]
Спасибо. Маленькая поправка:
sleep(секунды)
usleep(милисекунды)
Но проблема то с max_execution_time не решается такиб образом. Как можно поступить в моей ситуации?
0
7 / 8 / 6
Регистрация: 11.05.2008
Сообщений: 876
08.09.2010, 17:43
повесить в crontab на 2-5 минут и проверять время отправки последнего письма по данному адресу
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
09.09.2010, 06:39  [ТС]
Но видимо не так просто. Вот допустим скрипт выполняется в такой последовательности:
- отправляет письмо;
- записывает в список рассылки дату отправки.
Если 30-секундный период работы скрипта завершиться как-раз после отправки, то запись даты не произойдет. Значит адрессат получит в итоге 2 одинаковых письма, вместо одного. Не хотелось бы так. Но направление, где копать - понятно. Спасибо.
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
09.09.2010, 10:57
что ты мучаешься, сделать что-то в слепую всё-равно не получится... Выкидывай своё чудо в инет , добавляй несколько мэйлов для рассылки и смотри как всё происходит!
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
09.09.2010, 11:51
to AlexKar:
Если скрипт из крона запускать в фоновом режиме, то он выполнится до конца не смотря на max_execution_time.
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
09.09.2010, 13:20  [ТС]
А что значит в фоновом режиме? Это как? У меня доступ к крону через панель. Я там устанавливаю время и команду. Все. В указанное время скрипт и срабатывает сам по себе. Это и есть фоновый режим?
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
10.09.2010, 01:17
>>Я там устанавливаю время и команду

Напиши как, вернее что ты устанавливаешь. Как ты вызываешь скрипт. Какая команда используется ...
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
10.09.2010, 06:37  [ТС]
В поле (вернее полях) временидаты:
10 17 * * 2

В поле команды:
php /home/ddwshop/public_html/rs/rs.php
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
11.09.2010, 18:48
php /home/ddwshop/public_html/rs/rs.php >/dev/null 2>1 &

Вместо /dev/null можно подставить путь к файлу, куда будет сыпаться весь оутпут из rs.php, а также ошибки.
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
12.09.2010, 07:28  [ТС]
Code
1
php /home/ddwshop/public_html/rs/rs.php >/dev/null 2>1 &
И тогда это будет фоновый режим? Т.е. 30-секундное ограничение на выполнение скрипта будет игнорироваться?
И еще вопрос: >/dev/null
dev - каталог
null - файл (т.е. null - никуда, если надо, то указать файл с расширением)
а вот дальше непонятно: 2>1 &
можно ли расшифровать эту часть строки?
Спасибо.
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
12.09.2010, 10:24
Я конечно могу отослать к мануалу по любому Linux-у ...

Да это фоновый режим, это можно увидеть по символу & в конце.
Вместо /dev/null укажи свой файл, если нужно, например /home/ddwshop/public_html/rs/rs.log.

0-поток ввода (< или 0<)
1-поток вывода (> или 1>)
2-поток ошибок (2>)

2>1 - перенаправляем поток ошибок в поток вывода, который можно писать в файл для анализа.

Вообще можно каждый поток брабатывть отдельно, если нужно конечно.
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
12.09.2010, 11:47  [ТС]
Огромное спасибо за разъяснения!
На мануал меня пихать не надо
Но прошу не счесть за назойливость - еще один вопрос:
при чем тут Linux ? У хостеров Apache на платформе Unix, так что, теперь фоновый режим не будет работать?
Или я глупрсть сморозил?
0
7 / 8 / 6
Регистрация: 11.05.2008
Сообщений: 876
12.09.2010, 14:45
Как правило, к платформе Unix относиться не только сама ОС, но и Linux, FreeBSD, OpenBSD итп =)
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
12.09.2010, 17:56
To AlexKar:
У тебя именно UNIX?
0
1 / 1 / 0
Регистрация: 13.05.2009
Сообщений: 244
13.09.2010, 06:28  [ТС]
На хосте UNIX, на локалке, есно -нет.
Я сделал проверочный скрипт - цикл 1 - 2000
после каждых 4 - задержка sleep() на 20 сек, а после всего этого отправка мне на мыло сообщения.
Все сработало, мыло получил.
Спасибо огромное за помощь и терпение
0
0 / 0 / 2
Регистрация: 11.12.2008
Сообщений: 219
13.09.2010, 10:17

Советую поговорить с хостером, по поводу отправки кучи сообщений с твоего адреса и не заморачиваться со слипом, этим не обманешь, разве что в первое время, да и быстрее будет отправляться ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2010, 10:17
Помогаю со студенческими работами здесь

Как можно прервать выполнение в условном операторе?
Как можно прервать выполнение в условном операторе: if ... then ... else 'прервать' end if ???

Можно ли задержать выполнение цикла на время с использованием таймера?
Здравствуйте. Сам не программист, но тем не менее пишу программу, по ходу которой выполняется цикл, который нужно поставить на паузу на...

Прервать выполнение конструкции без выхода из метода\цикла
Добрый день. Не могу понять как сделать следующее... int x = 0; while (x &lt; 10){ x++; if (x == 5)break;//break выйдет...

Как завершить выполнение скрипта через определенное время?
Возникла задача организовать завершение скрипта через определенное время, допустим через 200 секунд. Структура скрипта: set...

Можно ли скриптом прервать выполнение другого скрипта?
&lt;script src=&quot;script-1&quot;&gt;&lt;/script&gt; &lt;script src=&quot;script-2&quot;&gt;&lt;/script&gt; Можно ли скриптом script-2 остановить работу script-1 или его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru