Hei!
Olen tässä yrittänyt etsiä jotain kunnon referenssiä siitä, että miten käytetään PHP:tä C++ -sovelluksissa. Tarkoitan siis, että voisin C++ -ohjelmaan tehdä PHP-pluginin. Olen tutkaillut -dev -paketin mukana tulleita headereita, mutta silti asia ei oikein minulle aukene. Löytyykö jostain päin nettiä jotain tutoriaalia millä luodaan yksinkertainen PHP-viritys C++:lla
PHP sisältää niin paljon omia funktioitaan, että ei olisi mielekästä tunkea PHP-tulkkia kaikkine funktioineen oman ohjelman sisään. Taitaa tuo dev-puolikin toimia paremmin niin päin, että PHP:hen voi tehdä C++:lla omia kirjastoja. Niiden tekemiseen taas löytyy helpoiten vastaus jonkin mahdollisimman yksinkertaisen PHP-pluginin lähdekoodista.
Millaisia plugineja tarkemmin olet tekemässä ja millaisessa ympäristössä niiden pitäisi toimia?
Lähinnä ajattelin irc-bottiini tehdä PHP-pluginimahdollisuuden. Eli käytännössä ohjelma toimittaisi tarvittavan datan PHP:lle joka suorittaisi skriptitiedoston ja tekisi asioita sen mukaan mitä data on. Tällähetkellä mulla PHP-skriptit pyörii niin, että muodostan main.php-tiedoston johon tulee $nick = "nikki"; ja sitten main.php suorittaa koodi.php-tiedoston jossa on erikseen skriptit. Servulle takaisin tunkeminen hoituu sillä, että echotan "SEND datatähän" ja ohjelmani hakee PHP:n outputin. Mietin, että voisi olla helpompi ja parempi vaihtoehto, jos saisin PHP-parserin ns bottini pääkoodiin.
PHP:n apache-pluginin (mod_php) lähdekoodista voisi ehkä olla jotain apua.
Oletko harkinnut PHP:n sijaan jotain muuta kieltä? Esimerkiksi Lua on suunniteltu juuri tällaiseksi helposti integroitavaksi plugin-kieleksi. http://www.lua.org/
Olen miettinyt luaa, mutta PHP sopisi tarkoitukseeni kaikista parhaiten. Mutta katselenpas apache-pluginin mod_php:tä jos siitä olisi apua. Tietysti jos joku löytää hyvän referenssin niin saa siihenkin linkin laittaa...
Vielä yksi mahdollisuus olisi käynnistää PHP erillisenä prosessina, kuten jo teetkin, ja kommunikoida sen kanssa jonkin RPC-menetelmän kautta. XML-RPC lienee niistä yksinkertaisimpia.
Erillinen prosessi on siitäkin kiva, että PHP-skriptisi mahdolliset kaatumiset, ikuiset silmukat ja muistivuodot eivät vaikuta pääohjelmaasi.
Niin, noh täytyypi katsella mikä olisi fiksuinta. Tosin PHP-skriptini toimii tällähetkellä sen verran loistavasti ettei se pääohjelmaan vaikuta muutakuin hieman hidastavasti (johtuen siitä et mysli on täynnä paskaa ja PHP-skripti käyttää sitä) Mietin vaan, että onko tämä tapani toimia kyseisessä jutussa fiksu / järkevä vai jopa väärä tapa toimia.
Toimintatapasi on aivan oikea, jos kutsuja C++:n ja PHP:n välillä ei tule niin valtavasti, että ne olisivat suurin rajoittava tekijä nopeuden kannalta.
XML-RPC:hen haluan vielä mainita sen verran, että XML on aika mutkikas ja vaatii käytännössä C++:n puolesta ylimääräistä kirjastoa ohjelmaan. Jos joustavuusvaatimukset eivät ole aivan hirmuiset, kannattaa ehkä harkita muitakin (omatekoisia) vaihtoehtoja. Aiheesta muualla: CodeProject: Simple Cross-language Serializing.
No sanotaanko nyt näin, että kaikki serveriltä tuleva data laitetaan PHP:lle, mutta PHP-skripti suoriutuu niin nopeasti siitä ettei merkittävää vaikutusta nopeuteen näy.
Aihe on jo aika vanha, joten et voi enää vastata siihen.