phpbar.de logo

Mailinglisten-Archive

[php] include(http://...) und $_GET

[php] include(http://...) und $_GET

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Mit Dez 7 09:53:10 CET 2005


Hi Matthias,

Am Mittwoch, 7. Dezember 2005 07:14 schrieb Matthias Stierli:
> Hallo Lutz
>
> > jein. $_GET['id'] steht nicht in include(http://....php); zur Verfügung,
> > wenn die Ausführung des PHP-Codes auf dem externen Rechner stattfindet.
> > In diesem Fall versuche mal:
> >
> >      include(http://....php?id=1);
>
> Ist bei dieser Art (http) include die Ausführung nicht zwingend auf dem
> anderen Server und verfügt deshalb nicht über die entsprechenden Variablen
> oder verfügt er über die Variablen, wenn die Seite auf dem gleichen
> Rechner liegt, aber trotzdem mit "http://..." aufgerufen wird?

die Antwort ist wieder: Jein... ;-)

Ja, es erfolgt zwingend auf dem anderen Server die Ausführung des PHP-Codes, 
sofern die Datei dort durch den PHP-Parser geschickt wird. Bei der 
Dateiendung .php ist dies standardmäßig der Fall.

Aber: Wenn die PHP-Datei auf dem anderen Server PHP-Code generiert, kann 
dieser wiederum in der einbindenden Datei ausgeführt werden!

Ich habe mal ein Beispiel programmiert:



==================================================
DATEI 1:
==================================================


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
	<head>
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
		<title>Demo: Include über HTTP</title>
	</head>
	<body style="font-family: Verdana, Arial, Helvetica">
		<h1>Demo</h1>
		<h2>Include über HTTP</h2>
		<hr />
		<h3>1. Datei test1.php:</h3>
		<?php highlight_file('test1.php'); ?>
		<hr />
		<h3>2. Datei test2.php:</h3>
		<?php highlight_file('test2.php'); ?>
		<hr />
		<h3>3. test1.php inkludiert test2.php über HTTP:</h3>
		<?php
		     $sVarInTest1 = 'Dieser Test steht in test1.php, wurde nicht an 
test2.php übergeben,
		     wird aber mit dem von test2.php zurückgelieferten Code in test1.php 
ausgegeben. :-)';
		     include('http://'.
$_SERVER['HTTP_HOST'].'/test2.php?sVarInGet='.urlencode($_SERVER['REQUEST_URI']));
		     ?>
		     <hr />
		     <p><i>Lutz Zetzsche / 07.12.2005</i></p>
	     </body>
</html>



==================================================
DATEI 2:
==================================================


<?php

  if (isset($_GET['sVarInGet']) && $_GET['sVarInGet'] == '/test1.php') {
    echo('<p>Die Datei '.$_SERVER['REQUEST_URI'].' wird über HTTP in die Datei 
'.$_GET['sVarInGet'].' inkludiert.</p>');
    echo('<p>Sie gibt selbst den Inhalt des ihr übergebenen Parameters 
<i>sVarInGet</i> aus und liefert PHP-Code 
             an die Datei '.$_GET['sVarInGet'].' zurück, mit dem diese 
wiederum den Inhalt der in ihr enthaltenen
             Variablen <i>$sVarInTest1</i> ausgegeben kann. $sVarInTest1 
existiert nur in '.$_GET['sVarInGet'].' 
             und wird nicht an '.$_GET['sVarInGet'].' übergeben.</p>');
    echo('<p><i style="color: #ff0000;">// Ausgabe in test2.php</i><br />
             <b>$_GET["sVarInGet"]:</b><br />
             <span style="color: #0000ff;">'.
$_GET['sVarInGet'].'</span></p>');
  }
  echo('<?php echo("<p><i style=\"color: #ff0000;\">// Ausgabe in 
test1.php</i><br />
                       <b>\$sVarInTest1:</b><br />
                       <span style=\"color: #0000ff;\">".
$sVarInTest1."</span></p>"); ?>');
 
?>



==================================================


Das Ergebnis kannst Du Dir vorübergehend einmal hier angucken:

	http://www.sea-rescue.de/test1.php

Ich werde es nachher wieder entfernen, weil ich extra dieser Datei dafür 
allow_url_fopen erlauben muß, was nicht die Standardeinstellung auf meinem 
Server ist... ;-)


Viele Grüße
Lutz

php::bar PHP Wiki   -   Listenarchive