![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| snake12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
На сервере под линуксом работает приложение с консолью.
Вводишь в консоль свои команды и они исполняются программой. Я пишу удалённое управление через веб терминал. Тоесть нужно на php передавать консоли некие данные. Чем и как это делать? * Процесс (программа) уже запущен/а. |
|||
|
||||
| bobik02 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 451 Регистрация: 26.11.2007 Репутация: 2 Всего: 14 |
Несовсем понял сути вопроса
-------------------- Have a nice day |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
| snake12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
Вводишь в консоль свои команды c клавиатуры и они исполняются программой.
|
|||
|
||||
| A1ekcandr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 27.6.2007 Репутация: 1 Всего: 1 |
тогда вариант c exec должен подойти
|
|||
|
||||
| snake12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
подскажите пожалуйста как именно это сотворить?
Программа уже запущена и запускать по новой её не надо, нужно эмулировать ввод данных в консоль Консоль как на примере cmd.exe |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
запусти cmd. смени активное окно на другое, скажем, открой "Мой компьютер". Теперь попробуй ввести что-нибудь в неактивное окно cmd.exe. Вот такая у тебя ситуация. Возможных вариантов три: 1. переделать программу так, чтоб она принимала данные не через консоль(через сокеты или через файл) 2. запускать программу каждый раз, когда тебе от неё чего-то надо(чем тебя, кстати, такой вариант не устраивает?) 3. воспользоваться механизмами ОС для эмуляции ввода. Под windows, к примеру, можно было бы воспользоваться оконным сообщение WM_KEYDOWN(вроде, не перепутал). Под *nix что надо использовать - не знаю. Да и программа должна быть сделана так, чтоб обрабатывать передаваемые сигналы. В любом случае, если у тебя *nix, то обратись в раздел по *nix системам(PHP умеет работать с сообщениями и Bourne shell; есть набор функционала только под windows). возможно, я слишком усложнил. всяко, сам не использовал такое, так что просто указываю направление куда стоит покопать. в любом случае, лучше первые два метода. |
|||
|
||||
| snake12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
На данный момент у меня работает так
php -> middleprogram -> cmd.exe Где middle program на c++ отсылает консоли информацию через pipe и directinput и её php каждый раз запускает по новой. ( фокус на окне + ввод или DI без фокуса ) Меня так не устраивает и отсюда два варианта. 1. Добавить в middle функционал за который отвечает php 2. Добавить в php скрипт задачи выполняемые middle program Что выполняет middle program я вроде объяснил. "Записывает" в cmd.exe то что мне надо. Я думал использовать php dio_open но его убрали из php 5 а я его пока не установил, но похоже из документации что он тоже запускает копию cmd. Только в любом случае я не имею понятия как получить id внешенго процесса. |
|||
|
||||
| bobik02 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 451 Регистрация: 26.11.2007 Репутация: 2 Всего: 14 |
skyboy отлично все объяснил
От себя добавлю: Была у меня похожая ситуация, решил перенаправлять stdout (I/O) в файл. И таким образом прога(демон) "общалась" через файл... -------------------- Have a nice day |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
если можешь изменять свою программу, то(говорю про windows, раз уж ведем речь про cmd.exe) добавь обработку в программе какого-то редкого(WM_USER + <достаточно большое число>) сообщения. а в РНР рассылай не конкретному окну. или же используй возможность вызова функций dll/exe из-под РНР. тогда тебе этот консольный ввод набок не важен будет. Добавлено через 1 минуту и 32 секунды впрочем, я без понятия, имеют ли отношения сообщения, описанные в мануале по РНР, к оконным вообщениям Windows. если нет - опять же, обращаться к dll, в которой лежит send_message. |
|||
|
||||
| snake12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
Сообщения в php помоему это и есть виндоусовские сообщения
там используется winapi на сколько я понял. Дело не в этом, и редактировать исходники cmd.exe я не могу. 1. переделать программу так, чтоб она принимала данные не через консоль(через сокеты или через файл) 2. запускать программу каждый раз, когда тебе от неё чего-то надо(чем тебя, кстати, такой вариант не устраивает?) 3. воспользоваться механизмами ОС для эмуляции ввода. Под windows, к примеру, можно было бы воспользоваться 1. Не могу. Программа не моя 2. Это игровой сервер естесвенно запускать и останавливать нельзя 3. Там unix . Как там дальше - я знаю. После хмм.. общении на 5 форумах получается что либо никто не знает как это реализовать либо это просто невозможно, в чём я сомневаюсь.. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
игровой сервер реально крут, если принимает ввод данных только непосредственно из stdin
а как под *nix можно эмулировать ввод?может, тебе надо в раздел по *nix системам, а не в PHP вопрос задавать? |
|||
|
||||
| snake12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
управляющие команды из stdin как остановка и т.п
|
|||
|
||||
| jsse |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 1.5.2006 Где: Кривой Рог Репутация: нет Всего: 2 |
Это действительно вопрос больше к юникс разделу.
Запускай в линукс программу через эмулятор терминала - screen
там запускай свою программу а из php
И ввод будет идти на терминал myterm Это сообщение отредактировал(а) jsse - 23.5.2008, 15:46 |
||||
|
|||||
| snake12 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 23.5.2007 Репутация: нет Всего: нет |
Тоесть по ходу вы мне предлогаете тоже самое что у меня и так есть
php -> middleprogram -> cmd.exe только middleprogram заменить на screen Получается работать с другими (уже запущенными) приложениями из php не получается ? Хотя чувствую ответ гдето близко. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |