Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP]PHP Code im String soll vor Ausgabe interpretiert werdn (https://www.delphipraxis.net/56160-%5Bphp%5Dphp-code-im-string-soll-vor-ausgabe-interpretiert-werdn.html)

Wuaegner 1. Nov 2005 16:39


[PHP]PHP Code im String soll vor Ausgabe interpretiert werdn
 
Hallo,
Ich habe einen String der mitunter PHP- Code enthält z.B
Code:
$string = '<html>...<?php include("../test.txt") ?>..</html>';
Lasse ich $string nun mit echo ausgeben, so präsentiert mir der Browser ja diesen String, ohne dass das PHP Konstrukt darin interpretiert wurde. Wie schaffe ich nun die Ausgabe, dass er den Teil in <?php vorher interpretiert und dann ausgibt?

Airblader 1. Nov 2005 16:44

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Entweder Doublequotes "" verwenden, oder auspunkten: 'test'.$bla.'test'

Tante Edith will noch ergänzen:

Bei Doublequotes kann eine Variable entweder direkt im String stehen oder mti dem Punktseparator getrennt werden:

Code:
$foo = "Test";
$string = "Dies ist ein $foo"; // -> Dies ist ein Test
$string = "Dies ist ein ".$foo; // -> Dies ist ein Test
Bei Singlequotes werden sie nur separiert geparst:

Code:
$foo = "Test";
$string = 'Dies ist ein $foo'; // -> Dies ist ein $foo
$string = 'Dies ist ein '.$foo; // -> Dies ist ein Test
Nochmal Tante Edith:
Verwendest du "", musst du übrigens escapen:

Code:
$string = "Bla sagt:"blubb" und geht."; // -> Falsch / Gibt nen Parse Error

-----------------

So, und nun ordentlich:
Da hab ich wohl ganz gravierend was übersehen.
Bekommst du die Daten so?
Wenn ja, schau dir mal [url]http://de.php.net/eval[/url] an, ansonsten verwende doch lieber [url]http://de.php.net/file-get-contents[/url]

air
$string = "Bla sagt:\"blubb\" und geht."; // Richtig -> Bla sagt:"blubb" und geht.

Wuaegner 1. Nov 2005 16:52

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
nein der string ist fest, da kann ich nichts daran ändern... wenn dann müsste ich mir die position von <?php suchen und dann das danach bis ?> mit .phpcode. anhängen, fand das aber zu umständlich weil ich dachte es gäbe ein funktion die das schon kann.

Airblader 1. Nov 2005 16:53

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Ja, habs grad gemerkt ;)

Schau dir mal eval() an, sei aber vorsichtig, da mächtig ;)

air

Wuaegner 1. Nov 2005 18:05

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Habe diesen Code-Schnipsel bei einem Kommentar auf php.net gefunden, der eigentlich das tun sollte was ich brauche, nämlich meinen ..include("..") Code im String auszuführen jedoch erhalte ich nun die Fehlermeldung syntax error, unexpected T_INCLUDE in C:\apachefriends\xampp\htdocs\editor\php\page_fini shed.php(75) : eval()'d code on line 13

Code:
  function eval_mixed_helper($arr){ 
  return ("echo stripslashes(\"".addslashes($arr[1])."\");");
  }

  function eval_mixed($string){
  $string = "<? ?>".$string."<? ?>";
  $string = preg_replace("/<\?=\s+(.*?)\s+\?>/", "<? echo $1; ?>", $string);
  $string = str_replace('?>', '', str_replace( array('<?php', '<?'), '', preg_replace_callback( "/\?>((.|\n)*?)<\?/","eval_mixed_helper",$string) ) );
  return eval($string);
  }

    // output to variable
  $final_html = eval_mixed($meinstring);
 
 
  echo $final_html
Was muss ich ändern?

Aenogym 1. Nov 2005 18:12

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
hi flo,

eval() gibt keinen string zurück, den du per echo zum ausführen bringst. sondern es führt den im paramater enthaltenen php-code direkt aus.

demnach kannst du die zeile return eval(...); löschen und stattdessen nur eval(...); dahin schreiben. an der stele wird der code dann ausgeführt.

aenogym

Wuaegner 1. Nov 2005 19:29

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
OK, aber der Fehler kommt weiterhin.
Hier der der Teil des $meinstring an dem es liegt:
Code:
<div class="lauftext"> <marquee scrolldelay="80" behavior="scroll"><?php include("http://localhost/editor/pages/news.txt") ?> </marquee></div>
Warum kommt der Fehler?

Edit1: Zu Testzwecken habe ich mal "include (...)" mit "$i=5;echo $i;" ersetzt.

Dann kommt die Fehlermeldung: unexpected T_Variable...

Er erwartet vielleicht noch etwas nach meinem <?php ?

Edit2: OK jetzt klappt es. Ich habe <?php durch <? ersetzt. <?php finde ich aber "schöner", wie muss ich die Funktion die ich gefunden habe umschreiben, damit es auch so klappt? Steig nicht ganz durch bei der Funktion. Wenn es aufwändig wäre, dass das mit <?php auch geht dann lass ich es so, es sei denn es hätte wirkliche Vorteile <?php statt <? zu nutzen.

malo 1. Nov 2005 20:05

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Eigentlich dürfte es zwischen "<?php" und "<?" keine Unterschiede geben. Ich hab sowas jedenfalls noch nie feststellen können (ist halt nur der Schönheit zuliebe - oder des Programmierstils). :gruebel:

edit: Vielleicht könntest du versuchen, "echo $i;" durch "echo($i);" oder durch
Code:
echo "$i";
zu ersetzen. ;)

Chewie 1. Nov 2005 20:12

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Zitat:

Zitat von Wuaegner
Edit2: OK jetzt klappt es. Ich habe <?php durch <? ersetzt. <?php finde ich aber "schöner", wie muss ich die Funktion die ich gefunden habe umschreiben, damit es auch so klappt? Steig nicht ganz durch bei der Funktion. Wenn es aufwändig wäre, dass das mit <?php auch geht dann lass ich es so, es sei denn es hätte wirkliche Vorteile <?php statt <? zu nutzen.

Das ganze lässt sich in der php.ini einstellen. Der Grund für die Langform ist, dass auch manche andere Scriptsprachen das <? benutzen. Benutzt man <?php, so ist eindeutig, dass PHP gemeint ist.

Airblader 1. Nov 2005 21:16

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Laut einem Userkommentar auf php.net macht es doch einen unterschied zwischen <? und <?php.
Hier der Quote:

Zitat:

to load a php file to a variable then execute it, try this

Code:
<?php
$code=file_get_contents("file.php");
$code=str_replace('<'.'?php','<'.'?',$code);
$code='?'.'>'.trim($code).'<'.'?';
eval($code);
?>
using < ?php within eval does not work, but < ? does. in case there is html in the file loaded, the script doesn't remove the < ?php and ? >, but insted adds ? > and < ? around the code loaded from the file. it's simple and works very well. I also broke up the tags in the 3rd and 4th lines of code to keep from having problems if the lines are commented out.

( http://de.php.net/eval )

Wuaegner 1. Nov 2005 21:24

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
OK, da ich aber keine anderen Scriptsprachen nutzen werde, belass ich es bei <? .. ?>.

Danke an alle :thumb:

Karbrüggen 1. Nov 2005 21:36

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Schonmal daran gedacht, die TXT-Datei per fopen() und fget() auszulesen, bspw. in ein Array und dieses dann auszugeben, bzw. noch direkter gleich die ausgelesenen Daten in einen String zu lesen und auszugeben?

mfg

Wuaegner 1. Nov 2005 21:47

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Was wäre dann besser?

Airblader 1. Nov 2005 22:09

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Zitat:

Zitat von Karbrüggen
Schonmal daran gedacht, die TXT-Datei per fopen() und fget() auszulesen, bspw. in ein Array und dieses dann auszugeben, bzw. noch direkter gleich die ausgelesenen Daten in einen String zu lesen und auszugeben?

mfg

Warum denn nicht gleich file_get_contents() ? ;)
Aber er sagte doch - er hat den String in der Form und kann es vorher nicht beeinflussen.

air

freak4fun 2. Nov 2005 08:43

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Zitat:

Zitat von Airblader
Warum denn nicht gleich file_get_contents() ?

Das hab ich nicht gefunden. Ist das eine Funktion von php?

MfG
freak

Wuaegner 2. Nov 2005 14:15

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Habe nun ein weiteres Problem, das aber noch zur urspr. Frage gehört:

Ich habe eine Seite die so aussieht:
Code:
<?
 include("../php/constants.php");

 $template_anfang;   // doctype usw.
 echo '<meta name="Description" content="Sauna Balingen Wellness La Stone">
   <meta name="Pagetopic" content="Wellness">';  // meta infos

 echo $template_bislaufschrift;          
 echo include("../pages/news.txt"); // Laufschrift
 echo $template_nachlaufschrift;     // Navigation usw.
 
 // Contentbereich
 echo '<span style="color: rgb(153,204,204)"><span style="font-size: 24px; color: rgb(0,0,0); font-family: verdana,geneva"><span style="color: rgb(0,0,153)">Aktuelles und Neues</span><img a><span style="color: rgb(51,0,0)">.</span> </font></p></blockquote></blockquote></span><span style="font-size: 24px; color: rgb(0,0,0); font-family: verdana,geneva"></span></span>';
   
 echo $template_ende;    

?>
Nachdem diese Seite interpretiert wurde von PHP enthält der HTML Code der mit echo ausgegeben wird Schlüsselwörter, die ich gerne ersetzen möchte. Versuche ich nun in meiner "ersetzungs_phpdatei"
die Seite vorher mit eval() zu durchlaufen und dann die Schlüsselwörter zu ersetzen, klappt das nicht da ja dann die echo befehle ausgeführt werden und die Seite nur im Browser richtig dasteht, ich den geparsten Text aber nicht in meiner Funktion zur Verfügung habe. Die echo's kann ich aber nicht weglassen da die Seite ja auch ganz normal aufgerufen werden können muss.
Wie ginge das?

Ich hoffe man konnte einigermaßen verstehen was ich meine :???:

DGL-luke 2. Nov 2005 15:21

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
ähm... könntest du nicht einfach die seite umschrieben? In nem jahr willst/sollst du wieder irgendwas ändern und stülpst wieder irgend so n konstrukt drüber... und das wird irgenwann sinnlos.

Ansonsten könntest du alle echo-Befehle durch $echo .= "..." ersetzen. damit kannst du dir dann alles einfangen. wird aber wieder kompliziert, weils ja mit dem HTML in der richtigen reihenfolge ausgegeben werden muss...

Ich an deiner Stelle würde mir mal ein kleines Kundengespräch alá "Also ich krieg das jetzt schon hin so, das wird dann aber teuer..." überlegen. :?

Wuaegner 2. Nov 2005 15:34

Re: [PHP]PHP Code im String soll vor Ausgabe interpretiert w
 
Ich lasse jetzte die echo "" s weg und füge stattdessen mit include() HTML Fragmente ein, wie Header, Footer usw. so gehts jetzt gut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz