За последние 24 часа нас посетили 18155 программистов и 1606 роботов. Сейчас ищут 919 программистов ...

отработка сторонней программы внутри PHP-скрипта

Тема в разделе "Прочие вопросы по PHP", создана пользователем Melichron, 9 авг 2013.

  1. Melichron

    Melichron Новичок

    С нами с:
    9 авг 2013
    Сообщения:
    4
    Симпатии:
    0
    ДД всем.
    возможно даже тему нужно было бы назвать как-то по другому, но пока название отражает то, как мне видится проблема.
    вопрос в следующем:
    1. есть веб-проект, написанный на php. странички там, joomla, пользователи, новости, статьи и прочая обычная шелуха.:)
    2. но суть проекта не в обычном контенте, а в отображении специальной информации, которая:
    а) формируется с применением серьезного матаппарата (стат обработка и принятие решений), который на php фиг реализуешь. (в некоторых случаях предполагается использование MatLAB). разумеется, что вся эта мулька написана на совсем другом языке (конкретно на C# и С++) с применением специальных библиотек, которых в php нет и в помине.:)
    б) исходные данные для обработки берутся из MSSQL на стороннем сервере, где еще и регулярно (примерно раз в 5-15 мин) обновляются.

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

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

    первое, что приходит в голову - это написание дополнительного расширения для php и реализация мульки в виде dll с последующим ее присобачиванием к php. Но: в инете на эту тему как-то не густо. Кроме того, при большом количестве обращений к этой dll мы получим и большое количество подключений к MSSQL (возможно это и можно как-то обойти, но я пока не знаю как), что не очень хорошо.

    в идеале, как мне видится, была бы такая картина, что мулька висит резидентно в памяти и держит постоянное подключение к MSSQL, а php передает ей запросы и получает ответы в виде XML, которые визуализирует... но это только мысли.

    вот такая задачка. какие будут предложения, коллеги?:) может я вообще не в ту сторону думаю?
     
  2. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    1. Поднять сервер на каком нибудь порту. PHP скрипт будет ему слать запрос и получать ответ.
    2. Обращаться к консольной проге через system(), exec(), etc в ответ получать имя файла с отчетом и забирать его.
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    не надо придумывать лишнего!
    скорее всего эти твои проги работают небыстро, недопустимо ждать их при формировании страницы. поэтому думать надо о формате файлов куда тупо лягут резултьтаты, а скрипт странички их разберет когда понадобится. т.е. всё "асинхронно".
    запускай не-пхпшные проги по расписанию.
     
  4. Melichron

    Melichron Новичок

    С нами с:
    9 авг 2013
    Сообщения:
    4
    Симпатии:
    0
    да, про асинхронность согласен. но файлы с отчетами не подойдут имхо, ибо их просто расплодится неимоверное количество.

    можно подробней об этом варианте?
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Я когда то использовал следующий вариант
    Программа генерировала файл со всеми необходимыми данными.
    По крону вызывался скрипт который парсил файл и выполнял необходимые действия.

    Думаю тебе про этот вариант говорят.
     
  6. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Пишите простенький сервис на том языке, на котором у вас "приблуда", сервис слушает определенный порт, принимает запросы и возвращает ответы. Я не могу быть уверен, что для вашей задачи такой вариант будет пригоден. Решать вам.

    Добавлено спустя 2 минуты 48 секунд:
    Я с C# мало знаком, но думаю поднять сервис, который будет слушать порт проблем не составит.
    По крайней мере на питоне делается элементарно :)
     
  7. Melichron

    Melichron Новичок

    С нами с:
    9 авг 2013
    Сообщения:
    4
    Симпатии:
    0
    слушайте, мне кажется, отличный вариант, спасибо...
    но пока не знаю как реализовать...:(
    а как из PHP запрос по определенному порту послать?
     
  8. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Проще всего, наверное, http://php.ru/manual/book.curl.html

    Добавлено спустя 4 минуты 14 секунд:
    Думаю если погуглить по запросу simple tcp server c#, найдете решение.
     
  9. Melichron

    Melichron Новичок

    С нами с:
    9 авг 2013
    Сообщения:
    4
    Симпатии:
    0
    shelestov, спасибо. буду копать в этих направлениях.:)

    Добавлено спустя 36 минут 3 секунды:
    Ребята, я нашел!:) shelestov, еще раз спасибо.
    вот оно мое щастье (сорри за код на C# на форуме по PHP, но все же....)

    Код (Text):
    1. //C# Network Programming by Richard Blum
    2.  
    3. using System;
    4. using System.Net;
    5. using System.Net.Sockets;
    6. using System.Text;
    7.  
    8. public class SimpleTcpSrvr
    9. {
    10.    public static void Main()
    11.    {
    12.       int recv;
    13.       byte[] data = new byte[1024];
    14.       IPEndPoint ipep = new IPEndPoint(IPAddress.Any,
    15.                              9050);
    16.  
    17.       Socket newsock = new
    18.           Socket(AddressFamily.InterNetwork,
    19.                       SocketType.Stream, ProtocolType.Tcp);
    20.  
    21.       newsock.Bind(ipep);
    22.       newsock.Listen(10);
    23.       Console.WriteLine("Waiting for a client...");
    24.       Socket client = newsock.Accept();
    25.       IPEndPoint clientep =
    26.                    (IPEndPoint)client.RemoteEndPoint;
    27.       Console.WriteLine("Connected with {0} at port {1}",
    28.                       clientep.Address, clientep.Port);
    29.  
    30.      
    31.       string welcome = "Welcome to my test server";
    32.       data = Encoding.ASCII.GetBytes(welcome);
    33.       client.Send(data, data.Length,
    34.                         SocketFlags.None);
    35. }
    осталось токма из PHP нужные запросы отправить;)
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    это проблема? :D тогда другие пути просто ужос-ужос. похоже вам просто делать нечего. в игонор.
     
  11. shelestov

    shelestov Активный пользователь

    С нами с:
    25 авг 2011
    Сообщения:
    148
    Симпатии:
    0
    Адрес:
    Россия, Арзамас
    Ничего страшного. Сделает несколько разных решений, потом прийдет к единственно верному. :)
     
  12. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Что на php писать дергать будет, что на C#, дергать будет. Только с C# еще и php, двойной урон скорости.
    А в чем собственно проблема хранить-это как логи? Можно парсить один файл.
    И непонятна суть задачи, что должно происходить и после чего.
    Пользователь, что-то выполняет, после входа или не только?
     
  13. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    если мне память не изменяет, матмодель можно даже в JS сохранить. (по моему в симулинке во всяком случае)
    почитайте про php и демоны, в вашем случае наверное сервисы )
     
  14. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Эту инфу разве трудно вывести из того же c# и c++ в виде файла html в момент, когда
    ?
    Потом инклудить из php или вообще напрямую выдавать.