| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Как сделать чтобы PHP-скрипт не зависал? |
| Автор: SeregaGREY 2.4.2010, 11:05 | ||
Имею скрипт, который работает с файлом - вытаскивает из него урлы и затем выполняет функцию с этими урлами:
так вот как видите скрипт сначала берёт данные (урлы) из файла в массив, затем обрабатывает этот массив - так вот эта обработка лится долго, а так как в файле очень много урлов, то время обработки всего массива увеличивается и скрипт например у меня успевает обработать только 8 урлов из файла. Так вот как сделать так чтобы скрипт без проблем мог обработать все урлы из файла? Слышал что можно использовать AJAX, или нет? Или может ещё что? |
| Автор: bars80080 2.4.2010, 11:47 |
и каков размер файла? |
| Автор: Wolf1994 2.4.2010, 13:32 |
| Функция file () работает с удалённым файлом или локальным? |
| Автор: SeregaGREY 2.4.2010, 14:52 |
| c локальным. размер меньше мегабайта. но суть не в долгом считывании файла а в том что функция выполняющая операции с данными из файла длится очень долго, то есть она выполняет операцию с первой строкой, затем со второй, затем с третьей. нужно как то после обработки каждой строки что-то сделть чтобы скрипт как бы начинал действовать заново а не обрабатывал все строки за раз и зависал |
| Автор: bars80080 2.4.2010, 15:53 |
| значит все проблемы в этой функции. можете дать код? мягко говоря, 8 строк даже за самый малый лимит в 30 секунд - это чересчур. здесь уместилось бы несколько десятков тысяч операций со строками. может быть у вас там открытие урлов и их чтение, а не просто обработка? в таком случае надо каждому урлу в соответствие прописывать флаг - обработан он или нет и записывать в тот же файл с базой данных в этом случае всё гораздо проще |
| Автор: SeregaGREY 2.4.2010, 17:30 | ||
да, у меня там по каждому урлу идёт POST-запрос на него. а зачем делать флаг обработан или нет? |
| Автор: bars80080 2.4.2010, 20:46 |
чтобы на следующем заходе начать с необработанных урлов. в базе прсто, вводится дополнительное поле, и туда записывается 1, если урл обработан. здесь же придётся мучаться с записью, и разборкой |
| Автор: SeregaGREY 2.4.2010, 21:00 | ||
всё равно не пойму зачем. ну запишем мы. а потом всё равно нужно же остальные обрабатывать. или вы предлагаете записать и остановить скрипт с выводом кнопки далее, у которой будет функция старта скрипта с урла с флагом? и так каждый раз эту кнопку нажимать? |
| Автор: SeregaGREY 2.4.2010, 23:59 | ||||||
но тут нужно кроны настраивать, а я просто хочу запустить скрипт и чтобы он сразу мне обработал файл. знаю что на AJAX можно как-то так сделать:
то есть оно не будет зависать а будет построчно читать и выводить на экран что прочло и обработало, завершать с одной строкой, останавливаться и заново запускаться уже со второй строки и т.д. а как это реализовать не знаю( |
| Автор: patap 3.4.2010, 00:16 | ||||
| ну как вариант, можно просто редиректить со скрипта на скрипт, тем самым прерывать работу скрипта делаем два файла к примеру main.php и temp.php в main.php будет
файл temp.php
|
| Автор: SeregaGREY 3.4.2010, 12:46 |
| z придумал лучше, но не знаю как реализовать. вот смотрите: обрабатываем файл с урлами, вытаскиваем первый арл, обрабатываем его, затем определяем нижестоящий урл и записываем его в сессию и редиректим на другой скрипт. другой скрипт принимает то что записано в сессии и обрабатывает это, потом определяет нижестоящий урл и редиректит на первый скрипт и так до бесконечности. так вот как сделать то что я выделил? какой функцией определить строку под строкой , которую мы знаем? ну и соответественно когда строки закончатся как это определить? |
| Автор: SeregaGREY 4.4.2010, 13:11 |
сделал так: в конце выполнения моей функции, которая обрабатывает урл, я поставил редирект как говорили на другой скрипт с GET['id']+1 и таким образом при каждом редиректе передаётся +1 позиция в GET и скрипты бродят по строчкам вниз и обрабатывают их |