• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

include2($string) soll wie include("datei") funktionieren

K

kutiku

Guest
Hi,
hat jemand schon so 'ne PHP-Funktion gemacht?
oder gibt's die und ich kenn die nicht?

Naja, wie lös' ich am besten das Problem, mit den globalen Variablen, da der String in einer Funktion geparst wird und dort auch mittels eval() ausgeführt wird
 
was ist in dem $string enthalten?

Globale Variablen musst du eigentlich nicht includen, sondern kannst direkt $string verwenden, meines Wissens.
 
in dem String ist irgendwas drinn'.
genauer, ein Teil einer Seite, welcher aus 'ner DB kommt.
Es ist eigentlich dasselbe drinn, wie in einer inlcude() Datei.

beispiel:

irgendeininhalt<?php irgendeincode?> mehrinhalt <?php mehr code?>...

Das Problem der globalen Variablen:
include2() ist eine Funktion. wenn ich in dieser Funktion, z.B. mit eval, Code ausführen lasse, der $PHP_SELF braucht, gibt's 'nen Fehler, da $PHP_SELF in der Funktion include2() nicht definiert ist.
 
naja,
$PHP_SELF war ein Beispiel.

Es kommen ja jede Menge Variablen vor.
 
Hallo!

Na, dann mußt du alle diese globalen Variablen so in die Funktion reinbringen. WIrd nicht anders gehen
 
hab's so gelöst

Falls es wen interessiert:
PHP:
function finde($str,$a,$b)
{
 function a($str,$a,$i=0)
 {
  if(is_array($a))
  {
   $x1=false;
   foreach($a as $x)
   {
    $x2=a($str,$x,$i);
    if($x2 && ($x1===false || $x2<$x1)) $x1=$x2;
   }
   return $x1;
  }
  else return strpos($str,strtolower($a),$i);
 }
 $out=array();
 $str2=strtolower($str);
 $x=a($str2,$a,0);
 $x2=a($str2,$b,$x+1);
 while($x!==false && $x2!==false)
 {
  $out[]=substr($str,$x,$x2-$x);
  $x=a($str2,$a,$x2);
  $x2=a($str2,$b,$x+1);
 }
 if(count($out)) return $out;
 else return false;
}

function include2($php_str)
{
 $php_x=strpos($php_str,"<?php");
 while($php_x!==false)
 {
  echo substr($php_str,0,$php_x);
  $php_str=substr($php_str,$php_x);
  $php_x=strpos($php_str,"?>");
  $php_code=substr($php_str,5,$php_x-5).";";
  $php_vars=finde($php_code,"$",array(" ","[","=","+","-","\n",".","(",")","/","*",";","&","|","\\","\"","'","$","{","}"));
  if($php_vars)
  {
   $php_aux2="";
   foreach($php_vars as $php_aux) $php_aux2.=", ".$php_aux;
   eval("global ".substr($php_aux2,1).";");
  }
  eval($php_code);
  $php_str=substr($php_str,$php_x+2);
  $php_x=strpos($php_str,"<?php");
 }
 if(!empty($php_str)) echo $php_str;
}
 
Finde brauche ich um vorjedem Code die benutzten Variablen zu finden, und global zu machen...

Aber stimmt, eigentlich könnte ich gleich am Anfang den ganzen String durchsuchen...aber Nachteil:
-Falls im Nicht Codeteil $ benutzt wird, wird hier auch eine Variable gefunden (OK, es gibt keinen Fehler).
-es wird der ganze String durchsucht. In der Schleife nur die Teile, die Code enthalten -> effizienter!
 
Ohhhhh Mann

Der ganze Apparat umsonst:

eval("?>".$string."<?php");

Bloß, weil ich nicht das Onlinemanual mit den Kommentaren gelesen habe
 
Zurück
Oben