Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,459

Как перезапустить скрипт передав get параметры?

30.01.2020, 19:51. Показов 2509. Ответов 14
Метки php (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Хлопцы, подскажите пожалуйсто, как такое можно сделать.

История такая. Есть у меня некий скрипт, который я запускаю с параметрами
clean.php?start=0&finish=1000

После того, как скрипт выполнится, нам нужно его перезапустить с другими параметрами, в нашем случае это будет start=1000&finish=2000 а потом снова перезапустить с такой же логикой start=2000&finish=3000

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

Лимит можно ограничить внутри скрипта переменной.

Зачем мне все это?

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

Дело в том, что этот скрипт некий чистильщик записей в базе данных. Он получает список картинок, после чего чекает их наличие и в случае возвращения 404 он их удаляет.

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

Вот я и думаю, как сделать, чтобы он перезапускался через определенное количество проверок.
Это можно делать по крону для каждой 1000 записей, но мне кажется это ересь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2020, 19:51
Ответы с готовыми решениями:

Как перезапустить скрипт?
Нужно, чтобы при выполнении некоторого условия текущий скрипт выполнялся бы сначала. И второй вопрос: как сделать, чтобы скрипт запускался...

Как полностью перезапустить программу из самой же программы? Не сбросить все параметры
Имеется достаточно длинная программа. Вся программа содержится в main() с использованием case. Нужно полностью ребутнуть всю программу,...

Как перезапустить скрипт, при скролле верх?
Доброго времени суток, будьте добры подсказать, как сделать, чтобы этот скрипт вызывался при скролле вниз, а при скролле верх, снова...

14
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
30.01.2020, 20:10
Лучший ответ Сообщение было отмечено skapunker как решение

Решение

Можно просто file_get_contents() сделать в конце, передав в URL параметры для следующего запуска.

PHP
1
2
$url = 'site.ru/clean.php?start=' . $_GET['finish'] . '&finish=' . ($_GET['finish'] + 1000);
file_get_contents($url);
Типа такого. Ну и ограничение какое-то, чтобы не было бесконечного цикла.
1
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,459
30.01.2020, 21:11  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Ну и ограничение какое-то, чтобы не было бесконечного цикла.
вот это теперь другой вопрос, как его остановить))
завтра попробую так сделать.

Наврено еще надо добавить
PHP
1
2
file_get_contents($url);
exit();
чтобы вызвать другой скрипт а этот прекратить.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
30.01.2020, 21:40
Цитата Сообщение от skapunker Посмотреть сообщение
как его остановить))
PHP
1
2
if($_GET['finish'] > 500000)
    die();
1
1306 / 998 / 232
Регистрация: 01.10.2018
Сообщений: 3,882
30.01.2020, 22:42
http_build_query и перенаправление, но это неправильно: самое мягкое, с чем вы при этом столкнетесь, - ограничение браузера ни количество перенаправлений. Можно делать множественные запросы на JS.

Цитата Сообщение от skapunker Посмотреть сообщение
Это можно делать по крону для каждой 1000 записей, но мне кажется это ересь.
Нормальные хостинги предоставляют доступ к консоли. Напишите CLI-скрипт.

Добавлено через 2 минуты
Да, рекурсия при помощи file_get_contents - это тоже очень сомнительное решение.
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,459
31.01.2020, 10:27  [ТС]
Цитата Сообщение от estic Посмотреть сообщение
самое мягкое, с чем вы при этом столкнетесь, - ограничение браузера ни количество перенаправлений. Можно делать множественные запросы на JS.
скрипт запускается не в браузере, а кроном.

Цитата Сообщение от estic Посмотреть сообщение
Напишите CLI-скрипт.
я понятия не имею что это...

Добавлено через 3 минуты
в общем сделал так

PHP
1
2
3
4
if($_GET['finish'] > $limit) exit();
$url = 'site.ru/clean.php?start=' . $_GET['finish'] . '&finish=' . ($_GET['finish'] + $step);
file_get_contents($url);
exit();
в принципе работает, но первый скрипт когда запускаем, он завершается по таймауту, а не выходит после "передачей эстафеты". Тобишь не доходит до exit();

еще такая мысля появилась, почему бы не использовать curl? То же самое будет. Не?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
31.01.2020, 10:41
а что мешает просто записывать какой-нибудь идентификатор (по какую запись проверка уже выполнена) в файл, а при запуске считывать содержимое данного файла?
1
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,459
31.01.2020, 10:48  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
а что мешает просто записывать какой-нибудь идентификатор (по какую запись проверка уже выполнена) в файл
а смысл? параметром проще передать
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
31.01.2020, 10:55
Цитата Сообщение от skapunker Посмотреть сообщение
параметром проще передать
действительно! особенно когда...
Цитата Сообщение от skapunker Посмотреть сообщение
скрипт ... завершается по таймауту
...и что он там уже проверил, а что еще нет - абсолютное "хз"!
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,459
31.01.2020, 10:57  [ТС]
Цитата Сообщение от Dmitry Посмотреть сообщение
...и что он там уже проверил, а что еще нет - абсолютное "хз"!
интересная версия))
но я сделал небольшие лимиты запросов, в рассчете на то, что скрипт успеет их проверить в течение таймаута, после чего дернет скрипт заново с другими параметрами.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
31.01.2020, 11:19
Цитата Сообщение от skapunker Посмотреть сообщение
Это можно делать по крону для каждой 1000 записей, но мне кажется это ересь.
Кстати, почему ересь? Нормальное решение. Поставить в скрипте таймаут 59 сек и пусть скрипт каждую минуту запускается.

И как намекнули выше, куда-нибудь сохранять последний проверенный id (файл, база данных), чтобы следующий скрипт знал, где закончил предыдущий.
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,459
31.01.2020, 11:25  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Кстати, почему ересь?
тогда мне придется добавлять задания для крона, как только количество записей в БД увеличится.

сейчас сделал через file_get_contents. Пока что пусть будет так, оно хоть работает.

Всем спасибо за ответы!
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
31.01.2020, 11:42
Цитата Сообщение от skapunker Посмотреть сообщение
придется добавлять задания для крона, как только количество записей в БД увеличится.
Почему? Условно, сохранили в базу последний id 65321. Далее скрипт запускается раз в минуту, видит, что новых записей нет и вырубается. Как только появляется новая запись - скрипт её видит и обрабатывает. Типа такого:

PHP
1
2
3
$last_id = 123456; // взяли из БД
 
$query = "SELECT * FROM `table` WHERE id > $last_id ORDER BY `id` LIMIT 1000";
0
 Аватар для skapunker
-30 / 25 / 12
Регистрация: 13.12.2013
Сообщений: 1,459
31.01.2020, 11:45  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Далее скрипт запускается раз в минуту, видит, что новых записей нет и вырубается.
беда в том, что картинки могут отсутствовать и у старых записей. То есть сегодня она есть, а завтра ее нет и запись надо удалить. Поэтому только новые записи проверять не вариант.
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
31.01.2020, 11:45
Цитата Сообщение от skapunker Посмотреть сообщение
как только количество записей в БД увеличится
тю! у вас есть база! добавьте в ней столбец, назовите его (например) "checked_at", и вписывайте туда юникстайм последней проверки. а потом делайте выборку с учетом данного столбца! ну или просто булево значение туда пишите типа true/false... кстати, наличие именно времени (юникстайма) позволит проще реализовать "периодичность проверок"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.01.2020, 11:45
Помогаю со студенческими работами здесь

Как перезапустить скрипт после его выполнения?
Подскажите пожалуста, как перезапустить скрипт, после того, как он выполнится. Или перезапустить его по таймауту, мне нужен небольшой...

Написать программу, в которой вычисляются выражения f и g в виде функций, передав им действительные параметры
Написать программу,в которой вычисляются выражения f и g в виде функций, передав им действительные параметры a,b,c,d введенные с...

Запустить программу в "фоне", передав ей параметры
Сильно не пинайте,пытаюсь написать ПЕРВУЮ программу на С# .Вот есть кнопка button1 } private void button1_Click(object...

Как получить из двух таблицы данные передав в Select массив
В базе есть две таблицы Таблица data +---------+-------------+------------------+---------+ | word_id | mainword | extraword ...

Можно ли отрисовывать массив, передав его, как параметр в функцию draw, в glutDisplayFunc(draw);?
В рамках курсовой работы у меня появилось задание написать игру "Жизнь" с консольным меню, и визуализацией opengl. Опираясь на мои...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru