Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Взаимодействие приложений   Найти похожие ветки 

 
>|<   (2012-03-18 00:18) [0]

Здравствуйте, уважаемые мастера!
Подскажите, как лучше осуществить взаимодействие Delphi-программы и PHP-сервера.
Программа будет строить отчеты по заданным параметрам, которые пользователь будет вводить на сайте. Программа будет находиться на сервере рядом с самим PHP-сервером.
Первая идея была - создать консольное приложение и передавать ему на вход в виде параметра JSON-объект, который парсить внутри.
Генератор отчетов должен по этим входным параметрам нагенерить PDF-файлы, ссылки на которые должны отобразиться на странице.
Возник такой вопрос: как вызвать внешнее приложение из PHP - это понятно, а как обратно в PHP передать результат выполнения программы, например - отчеты сгенерированы или ошибка параметров? Может лучше сделать как сервис, но есть ли возможность на PHP управлять виндовыми сервисами и как в них передавать или получать из них данные?
Возможно стоит использовать порт и взаимодействовать через порт?

Поделитесь, у кого был подобный опыт.
Заранее благодарен.


 
palva ©   (2012-03-18 00:29) [1]

А php зачем? Пусть будет cgi программа на Delphi. Она сгенерит pdf, сохранит его в поток, а потом передаст с нужным заголовком браузеру клиента. Если файл хранить на диске, то возникнут вопросы, сколько времени хранить, где хранить информацию о сгенеренных файлах и т. д.


 
sniknik ©   (2012-03-18 01:01) [2]

> Программа будет находиться на сервере рядом с самим PHP-сервером.
PHP-сервером? странно. вообще то,  php это интерпретатор/язык, а сервер под которым он обычно работает это http.

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

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


 
icelex ©   (2012-03-18 01:03) [3]

мммда...
архитектура - на-ура...


 
sniknik ©   (2012-03-18 01:03) [4]

> А php зачем?
я бы наоборот сказал, нафига тут Delphi?

т.к. -
> Первая идея была - создать консольное приложение и передавать ему на вход в виде параметра JSON-объект, который парсить внутри.
> Генератор отчетов должен по этим входным параметрам нагенерить PDF-файлы, ссылки на которые должны отобразиться на странице.
это и на "чистом" php без проблем делается.


 
Дмитрий С ©   (2012-03-18 01:22) [5]

1. сохранить в темпе файл с  json кодом.
2 выполнить php myfile.PHP <путь к файлу в темпе>
3. Забрать результат.

Или поискать в сети php4delphi


 
Германн ©   (2012-03-18 01:49) [6]


> sniknik ©

<offtop>
Николай, вам можно задать пару вопросов по работе с БД как-то приватно?
</offtop>


 
Медвежонок Пятачок ©   (2012-03-18 01:51) [7]

Генератор отчетов должен по этим входным параметрам нагенерить PDF-файлы

зачем программе это делать?
похапе само может это сделать без консольной подпорки

http://www.mpdf1.com/mpdf/


 
palva ©   (2012-03-18 11:07) [8]


> я бы наоборот сказал, нафига тут Delphi?

Я понимаю так, что программа на Delphi, которая генерит отчет и делает pdf, уже сделана, и есть желание приделать к ней web-интерфейс.


 
Андреевич   (2012-03-18 11:12) [9]


> Возник такой вопрос: как вызвать внешнее приложение из PHP
> - это понятно, а как обратно в PHP передать результат выполнения
> программы, например - отчеты сгенерированы или ошибка параметров?
>  Может лучше сделать как сервис, но есть ли возможность
> на PHP управлять виндовыми сервисами и как в них передавать
> или получать из них данные?
> Возможно стоит использовать порт и взаимодействовать через
> порт?

можно через сокеты, пхп будет обращаться к программе через него, но нужно учесть одновременные коннекты.
можно написать (в том числе и на дельфи) расширение для пхп, скорее всего будет медленее чем в первом варианте, но работоспособно.
можно нарисовать cgi


> palva ©   (18.03.12 00:29) [1]
> А php зачем?

например, через php будут формироваться параметры для построения отчетов


 
sniknik ©   (2012-03-18 11:34) [10]

Германн ©   (18.03.12 01:49) [6]
;(, нежелательно. если скажу можно, то буду чувствовать себя обязанным... не хочу обязательств на пустом месте.

> например, через php будут формироваться параметры для построения отчетов
т.е. чистая дельфевская программа не может сформировать параметры?

зачем это скрещивание ежа с ужом? серверный мультисистемный скрипт с клиентской(cgi там выше предлагалось, проигнорировано, значит не подходит) виндовой прогой?
при том, что обе "системы" легко сделают обе части самостоятельно. т.е. скрестить сложнее чем доделать одну из систем.

кстати вариант "скрещивания" - в дельфи программу добавляем http сервер, и скрипт обращается к локальному серверу (по другому порту, 80 будет занят "большим" HTTP) для получения PDF файла. т.е. стандартно по ссылке, только к внутреннему серверу.
достоинство метода - когда блаж пройдет, одну часть переделывать практически не придется... просто вместо ссылок на делфи вставляются ссылки на PHP скрипт с генерацией PDF.


 
palva ©   (2012-03-18 11:37) [11]


> например, через php будут формироваться параметры для построения
> отчетов

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


 
Андреевич   (2012-03-18 12:05) [12]


> sniknik ©   (18.03.12 11:34) [10]
> Германн ©   (18.03.12 01:49) [6]
> ;(, нежелательно. если скажу можно, то буду чувствовать
> себя обязанным... не хочу обязательств на пустом месте.
>
> > например, через php будут формироваться параметры для
> построения отчетов
> т.е. чистая дельфевская программа не может сформировать
> параметры?

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


> palva ©   (18.03.12 11:37) [11]
>
> > например, через php будут формироваться параметры для
> построения
> > отчетов
>
> Это понятно. Но это такое уж небольшое дополнение к программе,
>  что его может взять на себя делфи-программа. Раз уж мы
> притащили делфи-программу на компьютер с запущенным веб-
> сервером, то эта программа вполне может самостоятельно с
> сервером взаимодействовать. Прокладка на php содержащая
> несколько строк кода ни к чему.

сам же ответил в [8], прицепив программу к вебсерверу можно "через сайт" сделать отчет. Пхп - это не только запуск, это может быть и система авторизации, формирование параметров к отчету на основе каких-то данных, gui. И кроссплатформенность для клиента. К тому же как она "может самостоятельно с  сервером взаимодействовать"? С каким сервером? Вот допустим апач как вебсервер, пхп как модуль, все это на 2003-м сервере, что в этом случае будет означать "может самостоятельно с  сервером взаимодействовать"?

PS У меня такое ощущение, что многие не понимают зачем тут php, и думают что им будут пользоваться как клиентским софтом. В то время как очевидней что хочется получать отчеты генерируемые дельфевой программой "через сайт", который в свою очередь работает на вебсервере с php.


 
Андреевич   (2012-03-18 12:15) [13]

Кстати, в свое время использовал php.exe как повершел (запускал кроном или планировщиком в командной строке), удобнейшая работа с массивами и строками, нужно было файлы по маске/дате архивировать/удалять, плюс пара скриптов на шаблонизатор - и сгенереную страничку html с результатами отправлял на почту. И все это portable, никаких зависимостей в системе и версий, легкий читаемый (привычный, но это мне) код. А, казалось бы, нафига пхп на клиенте...


 
palva ©   (2012-03-18 12:35) [14]


> что в этом случае будет означать "может самостоятельно с сервером взаимодействовать"?

В данном случае с Apache.


 
sniknik ©   (2012-03-18 13:48) [15]

> т.е. предлагаешь написать еще одну программу
я предлагаю либо PHP либо Delphi без "скрещиваний", НО если уж неймется то извращайся как хочешь, неважно как ты меня понял, хотя очевидно неправильно. но это неважно, так тоже для изврата пойдет.


 
sniknik ©   (2012-03-18 13:55) [16]

> А, казалось бы, нафига пхп на клиенте...
ты уж определись -> [0]
> которые пользователь будет вводить на сайте.
т.е. тут вроде как php на сервере, оттуда страничку формирует, и прогу, клиентскую по сути, на дельфи, тоже туда планируется вставить.


 
palva ©   (2012-03-18 15:24) [17]


sniknik ©   (18.03.12 13:55) [16]
> А, казалось бы, нафига пхп на клиенте...

Это он про свою практику, которая не имеет отношения к вопросу ветки.


 
Медвежонок Пятачок ©   (2012-03-18 17:17) [18]

И кроссплатформенность для клиента.

Она будет, если убрать твой консольный project.exe.
Тогда - да. решение будет работать везде где доступен апач и пхп.
Хоть на стоядерном зионе под виндой, хоть на крохотном арме внутри домашнего наса.


 
Андреевич   (2012-03-18 19:45) [19]


> palva ©   (18.03.12 12:35) [14]
>
> > что в этом случае будет означать "может самостоятельно
> с сервером взаимодействовать"?
>
> В данном случае с Apache.

каким образом?
серьезно спрашиваю, вот есть у меня ехе, которое делает отчеты, но параметры для отчета может принять в параметре запуска. И как мне с апачем ее скрестить?


> sniknik ©   (18.03.12 13:55) [16]
> > А, казалось бы, нафига пхп на клиенте...
> ты уж определись -> [0]
> > которые пользователь будет вводить на сайте.
> т.е. тут вроде как php на сервере, оттуда страничку формирует,
>  и прогу, клиентскую по сути, на дельфи, тоже туда планируется
> вставить.

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


> Медвежонок Пятачок ©   (18.03.12 17:17) [18]
> И кроссплатформенность для клиента.
>
> Она будет, если убрать твой консольный project.exe.

Ты отквотил очень точную цитату, в которой все сказано. Для клиента будет кросс, потому что клиент общается с сервером через браузер, и не важно как сформирован http-ответ, хоть на болгеносе.
У меня есть сервис со встроенным вебсервером, написан на дельфи, может вызывать сторонние программы, получать вывод и отдавать обратно клиенту. А я, клиент, спокойно этот "ответ" читаю хоть под ВинХР в ИЕ, хоть в ФФ на болгеносе, хоть на телефоне с андроидом.


 
palva ©   (2012-03-18 19:54) [20]


> каким образом? серьезно спрашиваю,

Я серьезно ответил первым же постом.


 
Андреевич   (2012-03-18 19:54) [21]

т.е., насколько я понял, автор хочет использовать свою прогу в вебсервере аналогично ping.exe в cmd.exe. Она запускается и от нее ожидается "вывод", который отдается клиенту. Плюс на ПХП может быть завязана авторизация (как самопальная, так и керберос+ldap), сокрытие для клиента источников данных для программы отчетов, и тп. Вариантов "зачем это надо" куча.


 
Андреевич   (2012-03-18 19:56) [22]


> palva ©   (18.03.12 19:54) [20]
>
> > каким образом? серьезно спрашиваю,
>
> Я серьезно ответил первым же постом.

CGI это значительная переделка, я уж думал может какое расширение для апача есть, которое запускает программу и потом возвращает результат...


 
sniknik ©   (2012-03-18 21:12) [23]

> которое запускает программу и потом возвращает результат...
стандартный ввод/вывод... оно и есть, и... та! да! это суть CGI.
которое как уже понял "не катит". также не катит http протокол, и судя по всему все что вообще могут здесь предложить, остается Хотабыч, только где ж его взять?


 
sniknik ©   (2012-03-18 21:18) [24]

> Вариантов "зачем это надо" куча.
кроме сферических коней в вакууме есть еще и аналогичные бараны и другая живность... но задачи не решаются "сферически", они решаются только конкретно, реально.
поэтому все что выходит за рамки [0] в прмер можно не приводить. желательно не приводить, если конечно цель не запутать обсуждение.


 
antonn ©   (2012-03-18 22:04) [25]


> стандартный ввод/вывод... оно и есть, и... та! да! это суть
> CGI.

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


 
Медвежонок Пятачок ©   (2012-03-18 22:18) [26]

Для клиента будет кросс,
А какая разница, будет ли клиенту кроссплатформенность? И как эта клиентская кроссплатформенность связана с серверной кроссплатформенностью? Никак.
Если клиент - браузер - то он кроссплатформен бай дизайн, чтобы ты там на сервере ни придумал.


 
Медвежонок Пятачок ©   (2012-03-18 22:27) [27]

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

Но допустим, что все сделано не через анус, и прилады нет вовсе. Есть только апач и похапе. Что надо сделать чтобы появился новый отчет?
Создать заготовку отчета в виде шаблонизированного html файла, получить данные отчета, вставить их в шаблон и отдать полученных хтмл пдф-библиотеке
. Все!


 
antonn ©   (2012-03-19 00:30) [28]


> Медвежонок Пятачок ©   (18.03.12 22:18) [26]
>
> Для клиента будет кросс,
> А какая разница, будет ли клиенту кроссплатформенность?
> И как эта клиентская кроссплатформенность связана с серверной
> кроссплатформенностью? Никак.

ты же сам цитировал мое предложение, в котором было сказано о кроссе для клиента, я про сервер ничего не говорил


 
Медвежонок Пятачок ©   (2012-03-19 00:37) [29]

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

а типа небыло бы твоего проджект1.exe, и не был бы браузер кроссплатформенным.

ты вообще о чем?
просто поболтать хочется?


 
sniknik ©   (2012-03-19 00:42) [30]

> я про сервер ничего не говорил
оффтопиш значит... а после претензии, что тебя не понимают, и не пытаются.


 
antonn ©   (2012-03-19 00:44) [31]


> ты вообще о чем?

ты когда цитировал мою цитату пост читал целиком? :)


> а типа небыло бы твоего проджект1.exe, и не был бы браузер
> кроссплатформенным.

типа небыло бы вебсевера который возвращал результат проджект1.exe в "общеизвестном формате" браузеру клиента - небыло бы кроссплатформенности.


 
sniknik ©   (2012-03-19 00:54) [32]

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


 
Германн ©   (2012-03-19 02:02) [33]


> sniknik ©   (18.03.12 11:34) [10]
>
> Германн ©   (18.03.12 01:49) [6]
> ;(, нежелательно.

Понял.


 
>|<   (2012-03-19 19:27) [34]


> > Генератор отчетов должен по этим входным параметрам нагенерить
> PDF-файлы, ссылки на которые должны отобразиться на странице.
>
> это и на "чистом" php без проблем делается.

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


 
>|<   (2012-03-19 19:29) [35]


> кстати вариант "скрещивания" - в дельфи программу добавляем
> http сервер, и скрипт обращается к локальному серверу (по
> другому порту, 80 будет занят "большим" HTTP) для получения
> PDF файла. т.е. стандартно по ссылке, только к внутреннему
> серверу.
> достоинство метода - когда блаж пройдет, одну часть переделывать
> практически не придется... просто вместо ссылок на делфи
> вставляются ссылки на PHP скрипт с генерацией PDF.

вот этот вариант мне понравился


 
>|<   (2012-03-19 19:35) [36]


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

Андреич уловил самую суть.)


 
Медвежонок Пятачок ©   (2012-03-19 19:35) [37]

PHP-разработчик не имеет достаточного опыта генерации отчетов

генерация отчета в этом случае сводится с формированию отчета в виде html с последующей передачей этого хтмл php-pdf библиотеке.

какой тут особый опыт требуется - да никакой


 
Андреевич   (2012-03-19 21:21) [38]


> какой тут особый опыт требуется - да никакой

не хочу хвастаться, но сделав не один сайт я прям сейчас не представляю как можно сделать вот это: "формированию отчета в виде html с последующей передачей этого хтмл php-pdf библиотеке". А если там заумная математика со сложным рисованием картинки в программе?


> вот этот вариант мне понравился

только остается написать неглючный веб-сервер =) который валидный http будет принимать/отдавать


 
Медвежонок Пятачок ©   (2012-03-20 00:14) [39]

это надо лет десять учиться, чтобы сумев сделать несколько сайтов, не смочь после этого сверстать в php тупую html страницу с представлением отчета.


 
Медвежонок Пятачок ©   (2012-03-20 00:18) [40]

сложные картинки:
http://mpdf1.com/examples/mpdf51demo3.pdf



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.58 MB
Время: 0.051 c
15-1341400402
Inovet
2012-07-04 15:13
2013.03.22
Нашли бозон Хигса (?)


15-1344432770
ProgRAMmer Dimonych
2012-08-08 17:32
2013.03.22
Доступ к INI-файлу из нескольких процессов


15-1338371588
Dmitry87
2012-05-30 13:53
2013.03.22
Windows XP -> VirtualBox -> Windows 8


15-1345750821
Прогер
2012-08-23 23:40
2013.03.22
TDWordRec откуда такое окончание?


15-1347609677
Dmitry87
2012-09-14 12:01
2013.03.22
Запуск программы от имени текущего пользователя





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский