Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выполнение программ
 
 автор: Прохожий :-)   (13.12.2006 в 23:10)
 
 

Здравствуйте!

Такая у меня проблема..

Допустим, я написал на С++ некую программу, скажем, калькулятор. Смысл таков: запускаю ее из шелла, после чего работаю с ней в режиме командной строки. Скажем, могу выбрать операцию, вводить числа и т.д.

Вопрос - как взаимодействовать с такой программой из РНР? Разница, например, с ls думаю понятна - ls выводит результат и автоматически закрывается; в моем же варианте предполагается запуск, и дальнейшая поддержка программы в работе, отправка данных ей, чтение ответов..

Если же это невозможно (??не думаю), тогда другой вопрос: (если знаете - ответьте и на него, пожалуйста:) - как запустить на сервере РНР-скрипт как демона? Тоесть чтобы он постоянно исполнялся в фоне, без ограничений на время и так далее..

Вообще тема довольно больная для меня в течении длительного времени,
а сейчас особенно..


Буду очень признателен за любую Вашу помощь и подсказку!

   
 
 автор: Саня   (13.12.2006 в 23:16)   письмо автору
 
   для: Прохожий :-)   (13.12.2006 в 23:10)
 

> Вопрос - как взаимодействовать с такой программой из РНР?
Функция exec().

Про демоны:
http://softtime.ru/forum/read.php?id_forum=1&id_theme=8283

   
 
 автор: Прохожий :-)   (13.12.2006 в 23:27)
 
   для: Саня   (13.12.2006 в 23:16)
 

Пришел в голову другой, более наглядный пример: любой IСQ-клиент под линукс:)
Пользователь вводит, скажем, номер и пароль на странице, нажимает "войти"..
Выполняется что-то вроде exec(`icq -u 12345 -p secret`);, причем сама программа не завершается.. Выводится сообщение "Подключение успешно", и ссылки: "Получить список", "Изменить пароль". Если юзер нажимает первое - исполняется первая команда, если второе - соответственно другая.. Причем обращение должно идти непосредственно к исполняемой в ДАННЫЙ момент программе.. Чорт извините если непонятно объясняю..

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

   
 
 автор: Прохожий :-)   (13.12.2006 в 23:32)
 
   для: Прохожий :-)   (13.12.2006 в 23:27)
 

И про демоны, такой же пример :) Скажем, скрипт ICQ бота. cheops верно заметил об особенности НТТР, но не совсем обязательно работать по этому протоколу!
Аська, например, может быть непрерывно подключенной неограниченное количество времени, для этого бы посадить скрипт в исполнение, и радоваться ему:)

заметил интересную вещь - если запускаю подобную вещь просто из браузера, то скрипт работает порядка 3 минут.
Если же из крона - стабильно висит до 10(!) часов! Если в настройках поставить максимальное время исполнения 99999999 - получается, он должен работать это самое время?

   
 
 автор: Саня   (14.12.2006 в 00:03)   письмо автору
 
   для: Прохожий :-)   (13.12.2006 в 23:32)
 

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

   
 
 автор: Саня   (14.12.2006 в 00:00)   письмо автору
 
   для: Прохожий :-)   (13.12.2006 в 23:27)
 

Запущенными ранее процессами можно управлять.
http://php.net/pcntl
http://php.net/proc-open

   
 
 автор: cheops   (14.12.2006 в 00:49)   письмо автору
 
   для: Прохожий :-)   (13.12.2006 в 23:10)
 

Обычно для того, чтобы программу было легко встраивать в скрипты, помимо диалогового, реализуют параметрический интерфейс, т.е. вы передаёте специальный набор параметров, который обозначит действие выполняемое калькулятором - он отработает и вернёт ответ. Например, так действует консольный клиент mysql - он может работать в диалоговом режиме, но при передаче ему параметра -e выполняет запрос и завершает работу. В результате с ним очень удобно работать из скриптов. Вероятно вам разумно тоже что-то в этом духе реализовать...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования