ugrás a tartalomhoz

include-olni másik php futási eredményét

kovikti · 2005. Már. 30. (Sze), 16.12
Hogyan oldható meg, hogy egy php-be beillesszek egy másik php(paraméteres!) futási eredményét?
pl.
include(valami.php?id=32)

Sajnos a szerver letiltja ha a teljes eléréssel próbálok rá hivatkozni.

Köszi!
 
1

hát,

bbalint · 2005. Már. 30. (Sze), 16.16
  1. <?php  
  2.   readfile('http://localhost/valami.php?id=32');  
  3.     
  4.   print(file_get_contents('http://localhost/valami.php?id=32'));  
  5.     
  6.   print(implode('', file('http://localhost/valami.php?id=32')));  
  7. ?>  
a másik megoldás, hogy te állítod be a GET metódusú változókat (register_globals=on esetén a sima változókat), hogy
  1. <?php  
  2.   $_GET['id'] =  
  3.   $id = 32;  
  4.     
  5.   include('valami.php');  
  6. ?>  
szóval, valahogy így... éna második megoldást javasalom, ez előbbit meg nem.

bbalint
4

fopen wrapper

bbalint · 2005. Már. 30. (Sze), 16.32
ha esetleg meg le vannak tiltva az ún. fopen wrapper-ek (protokoll kezelők), akkor meg egy alternatív PHP-s HTTP kliens (fsockopen() manual a barátom)
  1. <?php  
  2.   function én_kicsi_http_kliensem($url){  
  3.     $parse_url = parse_url($url);  
  4.       
  5.     if(!$fp = fsockopen($parse_url['host'], !emptyempty($parse_url['port'])? $parse_url['port']: 80, $errno$errstr, 3))  
  6.       return(false);  
  7.       
  8.     if(!emptyempty($parse_url['query']))  
  9.       $parse_url['query'] = '?'.$parse_url['query'];  
  10.     else  
  11.       $parse_url['query'] = '';  
  12.       
  13.     fwrite($fp'GET '.$parse_url['path'].'?'.$parse_url['query'].' HTTP/1.0'.chr(13).chr(10)  
  14.               . 'Host: '.$parse_url['host'].chr(13).chr(10)  
  15.               . 'User-Agent: '.__FUNCTION__.chr(13).chr(10)  
  16.               . 'Connection: close'.chr(13).chr(10));  
  17.       
  18.     $return = '';  
  19.     while(!feof($fp))  
  20.       $return .= fgets($fp, 128);  
  21.       
  22.     return($return);  
  23.   }  
  24. ?>  
ezzel a megoldással még az szok' lenni a bajom, hogy itt-ott hexa számok kerülnek a válaszba.
(ami lehet hogy a HTTP szabvány része, lehet hogy hiba; én nem tudom - nem értek hozzá.)

van még egy nagyszerű cURL nevű PHP kiterjesztés, HTTP meg egyéb kérések elvégzésére; létezik egy HTTP_Client nevű PEAR csomag

bbalint
2

vagy ...

bbalint · 2005. Már. 30. (Sze), 16.18
vagy ha arra gondolsz, hogy az említett valami.php PHP kódot generál, amit teszeretnél (de nagyon) lefuttatni, akkor pedig:
  1. <?php  
  2.   $_GET['id'] =  
  3.   $id = 32;  
  4.     
  5.   ob_start();  
  6.   include('valami.php');  
  7.   $eval = ob_get_contents();  
  8.   ob_end_clean();  
  9.     
  10.   eval($eval);  
  11. ?>  
bbalint
3

RTFM

Anonymous · 2005. Már. 30. (Sze), 16.31
RTFM: include 3.példa
  1. <?php   
  2. // Won't work; looks for a file named 'file.php?foo=1&bar=2'   
  3. // on the local filesystem.  
  4. include 'file.php?foo=1&bar=2';  
  5.   
  6. // Works.  
  7. include 'http://www.example.com/file.php?foo=1&bar=2';  
  8.   
  9. $foo = 1;  
  10. $bar = 2;  
  11. include 'file.txt';  // Works.  
  12. include 'file.php';  // Works.  
5

Works.include

kovikti · 2005. Már. 30. (Sze), 16.40
Works.include 'http://www.example.com/file.php?foo=1&bar=2';
Na ez az, hogy nem működik, Permission denied van.
Nem php kódok generál, sima html-t.

Hogy szokás a következűt csinálni? Van bal oldalon egy menüm, azon kattintgatok és behozza jobb oldalra az adott html-t, amire hivatkozik a bal oldal. Namost. Eddig Frame-es volt az oldal, jól is ment.
Most átírtam egy php-sre, ami beolvassa a menüt (bal oldal) és beolvas egy html-t, ezt jobbra teszi. Így legenerálódik minden alkalommal egy menüs-tartalmas html. Csakhogy van egy oldalam, ami nem html, hanem php és ráadásul paraméter is kell neki. Ezt nem tudom úgy include-olni, mint a html-eket. A fentiek sem nagyon működtek, ugyanúgy permission denied volt (uw.hu...). A $_GET-et még nem próbáltam... Azért nem az a legjobb, ha betölti a php forrását és ebben a másik php-ben futtatja le. Pl. a <? ?> jelekkel is lehet baj...

Akkor lehet, hogy maradok a frame-eknél...
6

hmm, akkor bocs...

gerzson · 2005. Már. 30. (Sze), 16.52
hmm, akkor bocs...

Az uw.hu-n meg kell nézni/kérdezni az érintett php.ini beállítások értékét. (php.ini: allow_url_fopen, --enable-url-fopen-wrapper ford.kapcs.)

Elvetemült kísérletként mi lenne a menüt kipakoló php-t auto_prepend-ként adnád meg, így minden .php file előtt lefutna? (Ha ez sincs kikapcsolva persze.) Baj, h. ez nem segít a sima .html fájlokon, hacsak át nem nevezed .php-ra őket. (Ez csak tipp.)
7

ööö

bbalint · 2005. Már. 30. (Sze), 16.56
az index.php vagy main.php vagy az a nagy dolog, ami menüt csinál meg mindent, szóval abba akkor legyen csak szépen egy include()
és amikor arról van szó, hogy PHP-t kell beilleszteni, akkor ennek az PHP-nak nemcsak az include()andó dolgot adod át (pl index.php?eztinclude=/etc/passwd), hanem még további paramétereket is, ami majd annak a PHP-nak jó lesz és használni is tudja: index.php?eztinclude=valami&parameter=ertek&parameter2=ertek,
illetve ha a beinclude()élt filében van esetlegesen egy <form/> is, akkor annak az action="" attribútumába pedig a $_SERVER['REQUEST_URI']-t tegyed:
  1. <form action="<?php print(htmlspecialchars($_SERVER['REQUEST_URI'])); ?>" method="post"/>  
vhogy, így.

bbalint
8

Hello!Amikor ilyen

Anonymous · 2005. Már. 30. (Sze), 16.57
Hello!

Amikor ilyen jellegű problémával találkozom és nincs sok időm vacakolni vele, akkor azt szoktam csinálni, hogy a "master" php-ben megfeleltetek néhány - amennyi kell - session változót a paramétereknek, majd a "slave" php-ben is hívok egy session_start()-ot és akkor elérem a "masterben" beállított sessionváltozókat és használom paraméter helyett!

Lehet, hogy nem túl elegáns, de MŰKÖDIK!! :)

..It just works!

Üdv.: Halee
10

Én is a sessiont-látnám a

Anonymous · 2005. Már. 31. (Cs), 06.48
Én is a sessiont-látnám a legegyszerűbbnek, vagy "legelérhetőbbnek". Valószínűleg ennél maradok.
Köszi!

Üdv KV
9

hozzáférés megtagadva

bbalint · 2005. Már. 30. (Sze), 16.59
hajó l tudom, a permissün denájd attól van, hogy az open_basedir értéke egy darab pont vagy hullámvonal, ami azt jelenti, hogy a saját könyvtáradon kívülre nem enged a PHP és neked sikerült valami olyasmit beadnod, ami azon kívül van.

bbalint
11

Köszi mindenkinek!

kovikti · 2005. Ápr. 2. (Szo), 14.46
Köszi mindenkinek!

A végleges és legegyszerűbb megoldás a következő lett: a fő php-be kellett küldeni a $_REQUEST paramétereket, a meghívandó php-t csak simán beinclude-olni, így az beszúrásra is került és meg is kapta a paramétereket!

Mindenkinek köszönöm a segítséget!