Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: mise 15. 06. 2012, 17:01:43

Název: Jak předávat data mezi programem a PHP
Přispěvatel: mise 15. 06. 2012, 17:01:43
Jak mohu jednoduše předávat data mezi aplikací a php? Nebo jaké jsou v linuxu možnosti? Dík

serial port - aplikace - ? - php (webserver) ...

Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Sten 15. 06. 2012, 17:33:35
Asi pomocí nějakých GET nebo POST požadavků. Ale záleží, co je to za data, kolik jich je, jak často je potřeba je předávat a co se s nimi na druhé straně bude dělat.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Vladimír Drgoňa 15. 06. 2012, 17:49:54
Asi pomocí nějakých GET nebo POST požadavků. Ale záleží, co je to za data, kolik jich je, jak často je potřeba je předávat a co se s nimi na druhé straně bude dělat.
Toto ma napadlo ako prvé. Skôr si myslím, že dotyčný chce v php spustiť externú aplikáciu, ktorá komunikuje so sériovým portom. Na to existuje http://php.net/manual/en/function.exec.php (http://php.net/manual/en/function.exec.php)
Pokiaľ má niečo komunikovať so sériovým portom, asi by to mohol byť daemon alebo cron, ktorý berie požiadavky a ukladá výsledky cez databázu, prípadne file, ale asi lepšia by bola komunikácia cez socket.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: mise 16. 06. 2012, 07:52:49
Ano, aplikace neustále komunikuje se zařízením přes sériový port a zpracovává data. Vím, že jde udělat sériovou komunikaci přímo v php, ale aplikace je psaná v C a má dost složitý protokol. Musel bych také neustále načítat data v php. Ale o to nejde. Nevím, co bude lepší, jestli předávat data přes soubor nebo socket? Databáze je pro mě moc složitá (ale asi se jí nevyhnu). Webserver bude fungovat jako grafické rozhraní pro diagnostiku. Nebude to tolik dat, půjde jen o několik html stránek, ale při změně dat refresh bude pomocí ajaxu.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: to_je_jedno 16. 06. 2012, 08:20:43
co treba pres databazi? neco podobneho resim, céčková aplikace pise neco do DB, phpkovy webUI to tam najde.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Kit 16. 06. 2012, 08:40:17
... Databáze je pro mě moc složitá (ale asi se jí nevyhnu). Webserver bude fungovat jako grafické rozhraní pro diagnostiku. Nebude to tolik dat, půjde jen o několik html stránek, ale při změně dat refresh bude pomocí ajaxu.

Co je na databázi složitého? Pomocí databáze se naopak aplikace velmi zjednodušuje, protože hromadu problémů si vyřeší sama. Řešit ACID jiným způsobem je dnes prostě krok zpět. Jediným problémem bude vybrat, kterou DB na ten účel použít, ale podle popisu vyhoví skoro všechny běžně dostupné.

Navíc taková DB dokáže ze získaných dat provádět různé agregace, filtry, řazení,... Tím se aplikace výrazně zjednoduší.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: mise 16. 06. 2012, 10:10:10
Dík za nakopnutí. Databáze asi bude opravdu rozumnější, stejně ji budu muset použít. Její velikost mi teď vychází na cca 100 x (proměnná, jména, popis a možná přibude další). Ale bojím se toho, že některé hodnoty se budou hodně často měnit, abych to pak rozumně zobrazoval v prohlížeči. Pak také nevím, zda nebude problém, aby k ní přistupoval program i php?
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Kit 16. 06. 2012, 10:19:00
Ale bojím se toho, že některé hodnoty se budou hodně často měnit, abych to pak rozumně zobrazoval v prohlížeči. Pak také nevím, zda nebude problém, aby k ní přistupoval program i php?

Právě na tohle jsou databáze stavěny. Kolik tisíc změn za sekundu budeš dělat?
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: mise 16. 06. 2012, 10:51:51
Kolik tisíc změn za sekundu budeš dělat?

Tolik hodnot to nebude, ani když použiju realtime graf 3-10 hodnot měnící se 10x za vteřinu. Vlastně mi ani nevadí zpoždění, protože jde jen o zobrazení, hlavní aplikace mi tyto hodnoty bude stejně ukládat.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Kit 16. 06. 2012, 11:09:43
Kolik tisíc změn za sekundu budeš dělat?

Tolik hodnot to nebude, ani když použiju realtime graf 3-10 hodnot měnící se 10x za vteřinu. Vlastně mi ani nevadí zpoždění, protože jde jen o zobrazení, hlavní aplikace mi tyto hodnoty bude stejně ukládat.

Možná ti bude vyhovovat databáze Redis. Ovšem i MySQL si s tím poradí.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: to_je_jedno 16. 06. 2012, 11:37:44
jak bylo receno vys: neber to tak, ze se ji "nevyhnes", ale ze je to nejlepsi mozna cesta. Pokud pouzijes neco relativne normalniho(mysql, pgsql, sqlite) tak hotovy connector najdes v podstate kazdem jazyku/frameworku. Budes naprosto jednoduse a TRANSPARENTNE zapisovat nekam(a vubec nemusis resit jak) a na druhy strane zase budes jednoduse cist. Teoreticky by tvoje aplikace treba mohla poskytovat nejakym zpusobem xml apod, ale rozhodne by to trvalo dele zprovoznit a vyladit. Na DB nemas co poradne ladit, ty jmenovane jsou tady desitky let.
Proste si udelas html soubor jako zobrazovatko s AJAX aktualizaci + JS na zpracovani dat. Na pozadi budes volat php skript ktery ti bude posilat XML. Naprosto elegantni reseni.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: mise 16. 06. 2012, 17:54:19
Jojo díky, použiju databázi, ta bude nejlepší.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: vyvojar 16. 06. 2012, 18:06:27
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Kit 16. 06. 2012, 20:30:53
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).

To by znamenalo předávat data z aplikace do DB nikoli přímo, ale prostřednictvím Apache a PHP. Bude to trochu pomalejší, ale fungovat to bude.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: mise 17. 06. 2012, 08:32:04
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).

Tuhle možnost bych zvážil, pokud by to mělo běhat i na windows. Tam nevím, jak bych se jinak napojil z aplikace na databázi. Buď xml nebo jako klient přes socket (pokud bych použil např. balík wamp server s apachem)?
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Waseihou 17. 06. 2012, 09:05:37
Zkus se mrknout na ICE - http://www.zeroc.com/

Citace
The Internet Communications Engine (Ice) is a modern distributed computing platform with support for C++, .NET, Java, Python, Objective-C, Ruby, PHP, and ActionScript. Ice is used in mission-critical projects by companies all over the world.

dá se to použít i pro vytvoření multiplatformní komunikace mezi aplikacemi pokud potřebuješ RPC (remote procedure call) a není to až tak složité, viz. demo:

http://www.zeroc.com/programmingModel.html

1. uděláš definici rozhraní ve Slice (trochu jako UML v COM):
Kód: [Vybrat]
// File example.ice
module Example
{
    interface Converter
    {
        string toUpper(string s);
    };
};

2. proženeš softíkem, třeba slice2cs, vypadnou ti zdrojáky a nějaký bordel okolo - slice2cs example.slice

3. napíšeš kód klienta
Kód: [Vybrat]
using Example;

public class Client
{
    public static void Main(string[] args)
    {     
        try
        {
            Ice.Communicator communicator = Ice.Util.initialize();
            ConverterPrx cvt = ConverterPrxHelper.checkedCast(
                communicator.stringToProxy("converter:tcp -p 10000 -h host.domain.com"));
            string upper = cvt.toUpper("hello world");
            System.Console.WriteLine("Server returned: " + upper);
            communicator.destroy();
        }
        catch(System.Exception ex)
        {
            System.Console.Error.WriteLine(ex);
            System.Environment.Exit(1);
        }
    }
}
a zkompiluješ csc /r:Ice.dll /lib:c:\Ice-3.3.1\bin client.cs example.cs


4. napíšeš kód serveru
Kód: [Vybrat]
public class ConverterI : Example.ConverterDisp_
{
    public override string toUpper(string s, Ice.Current c)
    {
        return s.ToUpper();
    }
}

public class Server
{
    public static void Main(string[] args)
    {
        try
        {
            Ice.Communicator communicator = Ice.Util.initialize();
            Ice.ObjectAdapter adapter = communicator.createObjectAdapterWithEndpoints(
               "converter", "tcp -p 10000");
            adapter.add(new ConverterI(), communicator.stringToIdentity("converter"));
            adapter.activate();
            communicator.waitForShutdown();
            communicator.destroy();
        }
        catch(System.Exception ex)
        {
            System.Console.Error.WriteLine(ex);
            System.Environment.Exit(1);
        }
    }
}
a zkompiluješ csc /r:Ice.dll /lib:c:\Ice-3.3.1\bin server.cs example.cs

5. spustíš server a pak client, server vrátí HELLO WORLD

Výhodou by mělo být že je podporováno docela dost jazyků a je to multiplatformní, mě osobně to zaujalo jako možné řešení jak napsat multiplatformně pluginy třeba v pythonu využívající RPC. Takže si uděláš aby aplikace která čte data byla z hlediska ICE "server" a to php bylo "klient", tedy role se prohodí.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Waseihou 17. 06. 2012, 09:06:19
Jo a je to kanón na vrabce ;)
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Kit 17. 06. 2012, 09:27:46
Čau, předchozí příspěvky jsem nečetl. K tématu. POST request může mít libovolnou velikost, takže klidně můžeš předat jako body requestu třeba xml soubor a pak si ho jednoduše načíst přes souborové funkce v php ( php://input).

Tuhle možnost bych zvážil, pokud by to mělo běhat i na windows. Tam nevím, jak bych se jinak napojil z aplikace na databázi. Buď xml nebo jako klient přes socket (pokud bych použil např. balík wamp server s apachem)?

XML je také možnost, ale řešit SOAP na lokálním stroji při takové zátěži asi nebude to pravé ořechové. Měl jsi asi na mysli přes soubor. Aplikace by klidně mohla i vygenerovat kompletní web a normálně ho uložit jako soubor. WAMP by v tom případě nebyl nutný, pokud by nebyl potřebný vnější přístup.

Podobně by se dal využít i formát JSON, klient by by nemusel obnovovat celou stránku, ale AJAXem by jen aktualizoval data.

Napojení z aplikace např. na Redis není tak složité. Má jednoduchý protokol, na který se dá velmi rychle napsat potřebné rozhraní, ale v knihovnách je jich dostatek. Pokud umíš otevřít socket a zapsat do něj string, nepotřebuješ ani tu knihovnu.

Možností je mnoho. Některé jsou výhodnější, jiné méně. Klidně si můžeš napsat v té aplikaci vlastní webserver, který bude přímo poskytovat XML nebo HTML.
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: and 17. 06. 2012, 09:56:49
Jo a je to kanón na vrabce ;)

Podobny: zeromq.org
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Vladimír Drgoňa 19. 06. 2012, 06:20:10

Aplikace by klidně mohla i vygenerovat kompletní web a normálně ho uložit jako soubor.


Nikdy by som nedovolil aplikácii, aby mala priamy prístup k rovnakým súborom, ku ktorým pristupuje apache. Zvlášť keby aplikácia obsahovala aj cudzí kód a už vôbec nie, keby tam mala pristupovať windoze aplikácia. To je akoby vykrikujem: všetkok malware a podobný bordel, poďte rýchlo sem a zaserte mi ostatný kód ..
Název: Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
Přispěvatel: Kit 19. 06. 2012, 06:32:52

Aplikace by klidně mohla i vygenerovat kompletní web a normálně ho uložit jako soubor.


Nikdy by som nedovolil aplikácii, aby mala priamy prístup k rovnakým súborom, ku ktorým pristupuje apache. Zvlášť keby aplikácia obsahovala aj cudzí kód a už vôbec nie, keby tam mala pristupovať windoze aplikácia. To je akoby vykrikujem: všetkok malware a podobný bordel, poďte rýchlo sem a zaserte mi ostatný kód ..

Stačilo dočíst odstavec. Kromě toho nebyla ani řeč o cizím kódu v aplikaci.