Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Фоновый процесс - PHP

9.9K
23 августа 2007 года
De_Montale
80 / / 23.08.2007
Добрый день! Постараюсь не лить воды и, в кратце, рассказать суть.
На PHP я стал писать относительно недавно и многого могу не знать.
Проблема в том, что мне необходимо устроить фоновый процесс, который будет анализировать особым образом нечто в файловой системе сервера и пересылать мне данные анализа на почту. Сам процесс, довольно ресурсоемкий и мне кажется, что забивать его в цикл нецелесообразно.
Подскажите пожалуйста, какой либо способ постоянной фоновой проверки.

Каждая проверка будет заносить результаты в MySQL. Так вот как сделать, чтобы фоновый процесс работы с CУБД работал постоянно и без остановки... Т.е. просмотр времени в записи БД и сверка с текущим временем. Если время настало, то делаем что-то... И так постоянно..

Каждая проверка начинается максимум в интервале 5-10 минут. Но думаю, что будет стоять 3 минуты. Я конечно уповаю на то, что MySQL считается постфактум самой быстрой СУБД...но все таки...

Средства: Apache2+PHP5+MySQL5.
9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
И вообще...Возможно ли это на PHP? Или тут нужен другой инструментарий?
2
24 августа 2007 года
squirL
5.6K / / 13.08.2003
Цитата:
Средства: Apache2+PHP5+MySQL5


Apache тут ВООБЩЕ никаким боком. по крайней мере - я тут не увидел для чего он. пока - отметаем его с негодованием.

Цитата:

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


- запуск из планировщика (cron если UNIX\Linux)
- используя демон. как реализовывается демон на PHP - не знаю, не пишу на PHP, но думаю примеры несложно найти в инете.

Цитата:

MySQL считается постфактум самой быстрой СУБД...


это заблуждение, весьма распространенное среди тех, кто кроме MySQL не видел СУБД :)

Цитата:

Сам процесс, довольно ресурсоемкий


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

12
24 августа 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: squirL

- используя демон. как реализовывается демон на PHP - не знаю, не пишу на PHP, но думаю примеры несложно найти в инете.


А демон делается как автора не устраивает: бесконечный цикл while(true) {}.

2
24 августа 2007 года
squirL
5.6K / / 13.08.2003
ну, поскольку
Цитата:

я стал писать относительно недавно и многого могу не знать.


то, думаю, автора мы разубедим :)

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Цитата: alekciy
А демон делается как автора не устраивает: бесконечный цикл while(true) {}.



Не имею представления, как организовать подобный цикл. Мысль конечно глупая и смешная, но не писать же в bugaga.php сей цикл, запустить его и оставить окно бразера открытым =)

Насколько помню, демон, это служба присущая только unix-based системам. У меня же серв поднят дома под виндой.

По поводу СУБД, возможно вы и правы. Я, лишь, вычитал это в книге. До этого всецело имел дело с IBExpert, Access и Paradox.

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

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Ах, да. Чуть не забыл =)

Юзер записывает файл на сервер. Вместе с тем, в связанную таблицу MySQL добавляется инфа о том, что такой то юзер, залил такой то файл с такой то датой и временем. Затем, по истечению данного срока, этот файл пересылается мне на мыло (оригинал удаляется).

Так вот я не могу понять в каком цикле (или коль уж так развиваются страсти службе) реализовать => проход по БД+сверка времени+отправка файла. И первое и второе и третье в отдельности я могу реализовать. А вот, чтобы сие действие шло непрерывно, увы, пока никак. ОЧЕНЬ важно чтобы цикл бесперебойно проводил итерации. Такой форс-мажор, как висяк сервера в расчет не берется. Кстати о сервере, сильно ли будет его грузить подобный цикл? Да и...вы уж простите за любопытство, но интересно. Не имею пока достаточного опыта в WEB программировании. Что будет если не успеет завершиться одна итерация, как уже должно наступить время следующей. Чисто теоретически?
12
24 августа 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: De_Montale
Не имею представления, как организовать подобный цикл.


Так я уже написал :D

Цитата: De_Montale

Мысль конечно глупая и смешная, но не писать же в bugaga.php сей цикл, запустить его и оставить окно бразера открытым =)


Есть cront про него уже писали. На винде это планировкщик.
Вот демон на примере сокета: http://alekciy.ru/test/anchor.php?url=http%3A%2F%2Fwww.php.net%2Fmanual%2Fru%2Fref.sockets.php&text=Simple%20TCP%2FIP%20server#anchor

Цитата: De_Montale

Насколько помню, демон, это служба присущая только unix-based системам. У меня же серв поднят дома под виндой.


Это не более, чем термин. На винда их просто называют фоновыми задачами, службами. Но сути это не меняет.

12
24 августа 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: De_Montale
Что будет если не успеет завершиться одна итерация, как уже должно наступить время следующей. Чисто теоретически?


:D :D :D :D
Неужели ты думаешь,что идут хаотически/одновременно?

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Хм) Многое не понял, но почву для поисков и размылений дали. Если что, я отпишу. :) Спасибо.
9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Дык) Я имею слабое представление о работе интерпретатора PHP и работе Apache в целом. Общие познания у меня сводяться к конструкции: Запрос на сервер->Обработка->Вывод.
Я могу с точностью ответить на "что если бы" только на win языках - Delphi, C, Вася... В конце концов, вы тоже не с рождения знали премудрости кодинга)
9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Дык) Я имею слабое представление о работе интерпретатора PHP и работе Apache в целом. Общие познания у меня сводяться к конструкции: Запрос на сервер->Обработка->Вывод.
Я могу с точностью ответить на "что если бы" только на win языках - Delphi, C, Вася... В конце концов, вы тоже не с рождения знали премудрости кодинга)

Да и не совсем понял по ссылке о сокетах. В Делфьине или C это можно назвать уровнем абстракции связи клиента и сервера...И планировщик все же нежалателен, т.к. лучше сразу ориентироваца на unix, т.к. будет на нем в итоге стоять.

Вообще, в голову пришла тупая мысль настрогать в Delphi exe-шник проивзодящий данный запрос регулярно. Но, это кажеться глупостью.
9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Хм...Видимо, я просто так и не понял что искать. =( Ибо в сети не наткнулся на закцикленность какого либо процесса.

Почитав http://webscript.ru/stories/06/08/29/3262393 это, поищу демон написанный на PHP для перебора паролей. Думаю, там есть некая схожесть. А вообще, огромная просьба. Разьясните более подробно что использовать.
9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Блин...Кроме планировщиков задание типа cron или task manager не могу найти способ. Если можете, расскажите подробней о сокетах.
240
24 августа 2007 года
aks
2.5K / / 14.07.2006
Цитата: De_Montale

Я могу с точностью ответить на "что если бы" только на win языках - Delphi, C


Ну назвать C - win языком просто неслыханная наглость =)))
Скорее компилируемые языки. )

По сути вопроса - ели есть представление как напимать такой фоновый бесконечный процесс на C - пиши точно ток же и на php. php - это такая же программа, только интерпретируемая, а не компилируемая, и она точно так же может быть отдельно запущенна на сервере безо всякого вебсервера и браузера. Правда не знаю почему писать надо именно на php, а не на том же C, но если есть причины - так вперед.

Правда писать демона имеет смысл, если требюуется его постоянная работа, когда перерывы между sleep-ами небольшие. Если же он что то полезное будет выполнять раз в несколько минут, а процесс стартует быстро, то прощще наверно всеж по планировщику задач запускать (cron например)?

240
24 августа 2007 года
aks
2.5K / / 14.07.2006
Цитата: De_Montale
Если можете, расскажите подробней о сокетах.


Сокеты - это для работы с сетью. Если твой процесс не должен ни с кем общаться по сети - зачем ему сокеты???

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
"Ну назвать C - win языком просто неслыханная наглость =)))"
Ну да...Тут я немного переборщил)))

"По сути вопроса - ели есть представление как напимать такой фоновый бесконечный процесс на C - пиши точно ток же и на php. php - это такая же программа, только интерпретируемая, а не компилируемая, и она точно так же может быть отдельно запущенна на сервере безо всякого вебсервера и браузера. Правда не знаю почему писать надо именно на php, а не на том же C, но если есть причины - так вперед."

На С ябы это бы простовпихнул в управляемый бесконечный цикл, и добавил бы для удобства иконку в трею. Или бы написал сервис. Но как сделать подобное в PHP не знаю.

Насчет сокетов) Я спрашивал не вообще о сокетах, а конкретно на PHP как могу их использовать. IMHO, "localhost:80" и "Client<>Server" тоже сокеты...Но разные :) Хотя ясно, что автор поста имел ввиду второе значение сокета. А вот в каком варианте я не понял. Планировщик хорош, но не так желаем. Но, тут подсказали способ, что можно как то с использованием sockets это сделать. Вот и спросил)))

"она точно так же может быть отдельно запущенна на сервере безо всякого вебсервера и браузера"

Вот тут пожалуйста, поподрбней. Это как без сервера, это как без браузера? Быть может, я в шаге от реализации)
12
24 августа 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: De_Montale

Я могу с точностью ответить на "что если бы" только на win языках - Delphi, C, Вася... В конце концов, вы тоже не с рождения знали премудрости кодинга)


Ха, если знаешь один язык, разобраться в другом не проблема. А вопрос об итерациях в цикле и вовсе убил :D . Неужели в "Delphi, C, Вася..." итерации у тебя идут не последовательно? ))

12
24 августа 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: De_Montale

Да и не совсем понял по ссылке о сокетах.


Да это я просто привел как пример бесконечного зацикливания ибо там как раз делают демон. И сокет в данном контексте совершенно тут не причем, просто привел первый попавшийся пример с PHP демоном и бесконечным циклом.

12
24 августа 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: De_Montale

Вот тут пожалуйста, поподрбней. Это как без сервера, это как без браузера? Быть может, я в шаге от реализации)


PHP может прекрасно работать без Апача как CLI. Знаю народ, который пишет на нем административные скрипты в AD виндошном взамен стандартных скриптов. Говорят намного удобнее и гибче.

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Цитата: alekciy
Ха, если знаешь один язык, разобраться в другом не проблема. А вопрос об итерациях в цикле и вовсе убил :D . Неужели в "Delphi, C, Вася..." итерации у тебя идут не последовательно? ))



Там конечно идут последовательно) Порой даже более чем) Только моя проблема не в языке, а в его действии на машине. Поясню.
Дано:
Скрипт 1 - action.php, Скрипт 2 - loop.php.
Action, как ты понял, производит действие.
loop.php вызывает скрипт action в некотором интервале c проверкой на то, закончил ли он выполнение или нет. Если да -> сверяем время и производим итерацию.

Я не знаю, как в PHP узнать о том, закончилось ли выполнение скрипта action, чтобы приступить к следующей итерации вызванной loop.php.

Пока я вижу только такую конструкцию. И то - туманно в ввиду постоянной работы цикла.

P.S. И вовсе нет смысла смеятся над чужим незнанием. Ты тоже многого не знаешь и тебе тоже будет неприятно если над тобой будут смеятся. Давайте будем солидарны друг к другу. :)

Просто я неуверенно чувствую себя в новой для меня среде. Это нормально и со временем пройдет)

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Хм.
http://rumata.dragons.ru/article.php?story=20061120170945727&mode=print
Это многое для меня прояснило. Блин. Мосчный оказывается язык. Жаль многопоточности нет :)))
240
24 августа 2007 года
aks
2.5K / / 14.07.2006
Цитата: De_Montale

На С ябы это бы простовпихнул в управляемый бесконечный цикл,


Просто цикл слишком жестко - надо хотя бы делать sleep потоку. Ато выжрец все ресурсы проца )

Цитата: De_Montale

и добавил бы для удобства иконку в трею. Или бы написал сервис.


Никаких иконок, сервисов не надо - просто исспользуя стандартные средства С и С++ это прекрасно пишется.

Цитата: De_Montale

Но как сделать подобное в PHP не знаю.


Да точно так же. Написать тот же цикл, теже sleep-ы. Вроде основные операторы, цыклы, условные операторы особо не отличаются - в чем проблема? ))

Цитата: De_Montale

IMHO, "localhost:80" и "Client<>Server" тоже сокеты...Но разные :)


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

Цитата: De_Montale

Вот тут пожалуйста, поподрбней. Это как без сервера, это как без браузера? Быть может, я в шаге от реализации)


Ну как как - это такая же программа как на C том же. Она так же может быть просто запущенна на сервере. Как обычная любая другая программа. Только она интерпретируемая и ее надо через интерпретатор запускать (но тебели при basic-е не знать что это такое).

Так прям и запускаешь: php YourScript.php

И веб-сервер с браузером тут совсем не при чем. Там php для других задач служит - генерации контента страниц. Но точно так же и другой язык исспользовать (да хоть тот же С =)) ) у php просто это основное применение. Но в твоей же задаче это не требуется )

240
24 августа 2007 года
aks
2.5K / / 14.07.2006
Цитата: De_Montale
Хм.
Блин. Мосчный оказывается язык.


Ну это ты конечно загнул. )))
Мощный =))

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Знатоки. А будет ли работать такая конструкция CLI скрипта

<?
пока не набрали "stop" выполняем что-то постоянно?
?>
240
24 августа 2007 года
aks
2.5K / / 14.07.2006
набрали где? )
9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Спасибо Aks. Многое прояснил) Позволь спросить. Как бы ты поступил на моем месте?
9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Цитата: aks
набрали где? )



Ну...кхе-кхе...Наскок я понял в корне php есть экзешник php-cli или php-cgi (в моем случае). Так вот в нем >php script.php)))

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

9.9K
24 августа 2007 года
De_Montale
80 / / 23.08.2007
Да, пожалуй crontab наилучший выход.
А вы не знаете каждый ли платный хостинг предоставляет его? (сайт не под NT будет. Эт точно). И может ли он давать сбой?

P.S. Еще раз восхищаюсь гибкостью языка) Рулеz)
12
24 августа 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: De_Montale
Да, пожалуй crontab наилучший выход.
А вы не знаете каждый ли платный хостинг предоставляет его? (сайт не под NT будет. Эт точно).


Ну так смотри в условиях хостинга. Нормальные хост компании такое предоставляют.

92
24 августа 2007 года
Тень Пса
2.2K / / 19.10.2006
Цитата: De_Montale
Знатоки. А будет ли работать такая конструкция CLI скрипта

<?
пока не набрали "stop" выполняем что-то постоянно?
?>


по умолчанию, и как правило Ctrl+C в консоле будет тебе STOP для скрипта на все 100% :-D

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

например там... типа того: есть файл start.lock запускать но ничего не делая завершать, а нету его - стартуемся по крону спокойно )

9.9K
25 августа 2007 года
De_Montale
80 / / 23.08.2007
Спасибо всем за ценные советы) Много узнал нового))))
2
28 августа 2007 года
squirL
5.6K / / 13.08.2003
далеко не все советы я назвал бы ценными :) например - городить кучу скриптов для запуска/остановки - это перебор. управление демонами обычно осуществляется при помощи сигналов.
вот этого -
Цитата:
loop.php вызывает скрипт action в некотором интервале c проверкой на то, закончил ли он выполнение или нет.


не надо.
кроме того, я так и не понял - зачем нужен Апач :)

3.6K
28 августа 2007 года
dimas09
92 / / 17.06.2007
Цитата: De_Montale
Да, пожалуй crontab наилучший выход.
А вы не знаете каждый ли платный хостинг предоставляет его? (сайт не под NT будет. Эт точно). И может ли он давать сбой?

P.S. Еще раз восхищаюсь гибкостью языка) Рулеz)


почитайте еще єто пригодится
http://www.ibm.com/developerworks/ru/library/os-php-batch/

9.9K
29 августа 2007 года
De_Montale
80 / / 23.08.2007
Цитата: dimas09
почитайте еще єто пригодится
http://www.ibm.com/developerworks/ru/library/os-php-batch/



Спасибо...Занятно... :rolleyes:

366
04 октября 2007 года
int
668 / / 30.03.2005
Без апача - это, например, "php-cgi.exe script.php". Только, возможно, ещё придётся поменять open_basedir на каталог, в котором лежит скрипт:

У меня есть такая вещь:
script.cmd:
setlocal
set open_basedir = c:\phpscripts
endlocal
start "" /min "c:\program files\php\php-cgi.exe" c:\phpscripts\script.php

Последняя строчка так длинно не помню зачем сделана, это я вроде пытался закрыть cmd-окошко, которое вызвало php, а то их два открыто было, разражали.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог