Jak předávat data mezi programem a PHP

Waseihou

Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
« Odpověď #15 kdy: 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í.


Waseihou

Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
« Odpověď #16 kdy: 17. 06. 2012, 09:06:19 »
Jo a je to kanón na vrabce ;)

Kit

Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
« Odpověď #17 kdy: 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.

and

Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
« Odpověď #18 kdy: 17. 06. 2012, 09:56:49 »
Jo a je to kanón na vrabce ;)

Podobny: zeromq.org

Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
« Odpověď #19 kdy: 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 ..


Kit

Re:Jak předávat data mezi programem a php (mezi aplikací a webserverem)
« Odpověď #20 kdy: 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.