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

<?php
  readfile('http://localhost/valami.php?id=32');
  
  print(file_get_contents('http://localhost/valami.php?id=32'));
  
  print(implode('', file('http://localhost/valami.php?id=32')));
?>
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

<?php
  $_GET['id'] =
  $id = 32;
  
  include('valami.php');
?>
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)

<?php
  function én_kicsi_http_kliensem($url){
    $parse_url = parse_url($url);
    
    if(!$fp = fsockopen($parse_url['host'], !empty($parse_url['port'])? $parse_url['port']: 80, $errno, $errstr, 3))
      return(false);
    
    if(!empty($parse_url['query']))
      $parse_url['query'] = '?'.$parse_url['query'];
    else
      $parse_url['query'] = '';
    
    fwrite($fp, 'GET '.$parse_url['path'].'?'.$parse_url['query'].' HTTP/1.0'.chr(13).chr(10)
              . 'Host: '.$parse_url['host'].chr(13).chr(10)
              . 'User-Agent: '.__FUNCTION__.chr(13).chr(10)
              . 'Connection: close'.chr(13).chr(10));
    
    $return = '';
    while(!feof($fp))
      $return .= fgets($fp, 128);
    
    return($return);
  }
?>
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:

<?php
  $_GET['id'] =
  $id = 32;
  
  ob_start();
  include('valami.php');
  $eval = ob_get_contents();
  ob_end_clean();
  
  eval($eval);
?>
bbalint
3

RTFM

Anonymous · 2005. Már. 30. (Sze), 16.31
RTFM: include 3.példa
<?php 
// Won't work; looks for a file named 'file.php?foo=1&bar=2' 
// on the local filesystem.
include 'file.php?foo=1&bar=2';

// Works.
include 'http://www.example.com/file.php?foo=1&bar=2';

$foo = 1;
$bar = 2;
include 'file.txt';  // Works.
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:

<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!