ugrás a tartalomhoz

CGI futtatása CGI alól futó PHP-ből

JurgN · 2009. Dec. 17. (Cs), 00.14
Üdv!

Egy CGI szkriptet szeretnék lefuttatni a drupal alapú oldalam sminkjébe illesztve. A virtual()-t használva viszont hibaüzenetet kapok, hogy bizony "undefined function" az a virtual()...
A szolgáltatót addig faggattam, hogy a válasz az volt: ha szeretném a virtual()-t, írjak magamnak php.ini-t, de ők ebben nem kívánnak segédkezni.

Letöltöttem az eredeti php.ini-t, de ott nincs bent a virtual() a letiltott fügvények között.

A phpinfo()-t futtatva a server api-nál cgi-t írt ki, ami, ha jól értelmezem, CGI alól futtatott a PHP-t jelent.
Itt olyat olvastam, hogy ilyenkor nem elérhető a virtual().

A kérdésem az, hogy lehetne mégis működésre bírni azt a CGI szkriptet?
Az include() és a request() krikszkrakszokat írt ki az oldalra, a linkelt kb-ben javasolt passtrhu() viszont le van tiltva a php.ini-mben, gondolom nem véletlenül.
 
1

Apache

janoszen · 2009. Dec. 18. (P), 11.44
Mivel a virtual() egy Apache-specifikus függvényhívás, szerintem CGI/FastCGI SAPI-ban nem érhető el, kizárólag a modulos változatban (mert abból fér hozzá a PHP az Apache APIjához). A virtual() nem hordozható, a FastCGI pedig fokozott biztonságot ad a szerveren, szóval szerintem, ne eröltesd a dolgot, inkább használj sima include-ot vagy curlt.
2

URL wrapper

vbence · 2009. Dec. 18. (P), 12.20
TCP-n keresztül futtathatsz egy requestet. Ahogy látom a sebességet nem viseled túlságosan a sziveden :) Ha be van kapcsolva (url wrapper), akkor működik:
include ("http://hosztom.hu/valami.cgi");
ezt tanácsos nem bekapcsolni, de próbálkozhatsz még ilyennel (allow_url_fopen):
$f = file_get_contents ("http://hosztom.hu/valami.cgi");
echo ($f);
3

Rossz ötlet

janoszen · 2009. Dec. 18. (P), 13.27
Had jegyezzem meg, hogy az első parancsod nagyon_nagyon_nagyon_nagyon rossz ötlet. Így ugyanis a CGI kimenetét PHP kódként dolgozod föl, tehát ha valakinek sikerül a tartalomba valami PHP-t beilleszteni, akkor azt vígan végre fogod hajtani. Pontosan ezért ez nagyon sok helyen nincs is engedélyezve. Az alsó már közelebb van helyes megoldáshoz és az sok helyen engedélyezve is van, bár lassú lesz.
4

Rendben...

vbence · 2009. Dec. 18. (P), 13.57
én hibám. Legyen inkább readfile. Mentségemre szóljon, hogy annyira életszerűtlen a környezet, hogy az alapvető dolgok sem esnek le. Valamint hogy úgysem lesz bekapcsolva ilyesmi egy éles szerveren :)

Még egy ötlet: mivel a CGI-k végrehajtható fájlok, futtathatod akár system()-mel is. Persze ilyenkor a szkript által produkált
Content-type: text/html
és hasonló headereket le kell nyelni. Nézd meg a system funkció "see also" bekezdését (a többi hasonló függvényért).
5

Köszönöm!

JurgN · 2010. Jan. 7. (Cs), 19.41
A második URL wrapperes megoldás végre megadta az eredményt. Lassúnak lassú, de majd a szívemre veszem a sebességet, ha lesz rá keret! Még 1x köszi nektek!