php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.09.2004, 22:39  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard preg_replace + Replacement als PHP code ausführen

Hallo,

1. Problem:
ich habe folgenden Code:
PHP-Code:
<?php
 $zeichenkette 
='irgendein text, blaaa ... {include file="seite.html"} und wieder text ';
 
$content preg_replace("/(\{include file=)(.*)(\})/i""include(\\2);"$zeichenkette); 
 echo 
$content;
?>
Der gibt mir folgendes aus:
Zitat:
irgendein text, blaaa ... include("seite.html"); und wieder text
Soweit so gut, aber wenn der Inhalt von $zeichenkette zum Beispie so aussieht:
PHP-Code:
 $zeichenkette ='irgendein text, blaaa ... {include file="seite.html"} und nochmal: {include file="seite2.html"} und wieder text '
wird folgendes ausgegeben:
Zitat:
irgendein text, blaaa ... include("seite.html"} und nochmal: {include file="seite2.html"); und wieder text
Was muss ich jetzt machen, damit das ganze so ausgeben wird:
Zitat:
irgendein text, blaaa ... include("seite.html") und nochmal: include("seite2.html"); und wieder text
2. Problem:
Nun möchte ich, dass "include("seite.html")" nicht ausgegeben wird, sondern an der entsprechenden Stelle als PHP Code ausgeführt wird.
Ich habe längere Zeit mir eval() herumprobiert, ich habe jedoch nicht das gewünschte Ergebnis erhalten. Könnte mir hier auch jemand helfen?
Corvin ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.09.2004, 23:36  
Gast
 
Beiträge: n/a
Standard Re: preg_replace + Replacement als PHP code ausführen

hallo...
zu deinem ersten problem...
wenn ich dich richtig verstanden habe, läuft die preg_replace funktion richtig ab, jedoch nur einmal statt die gewünschten beiden teile zu ersetzen...

warum baust du dir nicht nen workararound für das problem, quasi ein ähnliches konstukt wie dieses hier *g*

Code:
<?php
$zeichenkette ='irgendein text, blaaa ... {include file="seite.html"} und wieder text {include file="seite2.html"}';

$content = $zeichenkette;
while (strpos($zeichenkette, "{include file=\"")!=false)
{
$content = preg_replace("/(\{include file=)(.*)(\})/i", "include(\\2);", 
$content);
}
echo $content;
?>
Habs jetzt nicht getestet, aber das müsste doch dann funzen.... *klug tu*

Zitat:
2. Problem:
Nun möchte ich, dass "include("seite.html")" nicht ausgegeben wird, sondern an der entsprechenden Stelle als PHP Code ausgeführt wird.
Ich habe längere Zeit mir eval() herumprobiert, ich habe jedoch nicht das gewünschte Ergebnis erhalten. Könnte mir hier auch jemand helfen?
achso, das sollen php-aufrufe im template werden... dann probier doch mal folgendes:

Code:
$content = preg_replace("/(\{include file=)(.*)(\})/i", "<?php include(\\2);?>",
das hätte den vorteil, dass deine includes im quelltext auch als php-code gekennzeichnet werden. - wenn du $content dann eval'st ruf es mal folgendermaßen auf:
Code:
eval("?>".$content."<?php");
dann musst du kucken ob die pfade zu den zu includenden dateien stimmen und der spaß sollte funktionieren...denke ich zumindest

hoffe ich konnte dir ein paar ideen geben...

greetz
andy
  Mit Zitat antworten
Alt 04.09.2004, 10:02  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Ich bin noch kein Schritt weiter, das führt mich auch nach vielen Versuchen zu Fehlermeldungen und ungewollten Ergebnissen.
Zitat:
achso, das sollen php-aufrufe im template werden
Ja, ich schreibe gerade ein eigenes. Hmm, könnte mir sonst vielleicht jemand einen Gedankenstoß oder so geben, wie ich includes in meinem Templatesystem realisieren kann (denn so wie ich mir das dachte, scheint das ja nicht zu klappen)?
Corvin ist offline   Mit Zitat antworten
Alt 04.09.2004, 10:34  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard

http://gothic.guradia.d2g.com/corvin.php (Edit: Die Domain muss evtl. noch scharfgeschaltet werden, einen Monent nur ^^)
Mit einem Callback klappts problemlos ...

PHP-Code:
<?php

$zeichenkette 
='irgendein text, blaaa ... {include file="seite.html"} und wieder text ';
$content preg_replace_callback(
    
'/\{include file="(.*)"\}/i',
    
'tplInclude',
    
$zeichenkette);
print 
$content;

function 
tplInclude($match)
{
    if (!
is_file($match[1]))
    {
        return 
$match[1].' is missing';
    }
    else
    {
        return 
file_get_contents($match[1]);
    }
}

?>
Guradia ist offline   Mit Zitat antworten
Alt 04.09.2004, 10:36  
Gast
 
Beiträge: n/a
Standard

als einfaches zum weiter aufbauen:

bsp.: eine Template datei index.tpl

Code:
<body> 

<div id="master">
  <div class="table">
  
    
    
    <div class="head">
      <div class="online">{ONLINE} user online  Datum: {DATE}  Zeit: {TIME} Uhr ( MEZ )</div>
    </div>
    
    
    
    <div class="left">
{LEFT}
    </div>
    <div class="middle">
{MIDDLE}
    </div>
    <div class="copy">
    
      
      
{COPY}

      
      
    </div>
  </div>
</div>
</body>
dieses template liest du in einen string ein und übergibst ihn
an eine replace routine

Code:
	// Replace Funktion
	function &replace($tpl, $repla){
		foreach($repla as $key => $elem){
			$tpl = str_replace("{".$key."}", $elem, $tpl);
		}
		return $tpl;
	}
wobei $tpl der templatestring ist und $repla das replace array

Code:
//
$tpl = einlesen deines templates ...
//
echo replace($tpl, array(
"COPY" => $deine....,
"USW" => $alles_was_erstetzt_werden_soll));
als grundgedanke zum weiteren aufbau ...


gruss


[edit]
schwache Kür das in einem PHP Forum es nichtmal geschafft wird den Bug mit mehreren [php] [/ php] zu fixen
!!
  Mit Zitat antworten
Alt 04.09.2004, 10:49  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

@J33d3X:
So weit war ich auch schon, nur wollte ich jetzt wissen, wie ich includes in meinem Templatesystem realisieren kann.

@Guradia:
Genial! Vielen Dank! Klappt wunderbar, nur wenn der Inhalt von $zeichenkette so aussieht:
Code:
$zeichenkette ='irgendein text, blaaa ... {include file="seite.html"} und wieder text {include file="seite2.html"}';
Dann kommt es natürlich wieder zu Fehlern:
Zitat:
irgendein text, blaaa ... seite.html"} und wieder text {include file="seite2.html is missing
Wie liesse sich das machen, damit das auch funktioniert, wenn {include file="irgendein_seite.ext"} X Mal in der Variable steht?
Corvin ist offline   Mit Zitat antworten
Alt 04.09.2004, 11:03  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard

aktuell nutzt du Modifier /i
erweitere das auf /isU

s = singleline ... (immer irgendwie nützlich ... ;P)
U = ungready ... damit nutzt er das erste "}, statt des letzten passenden
Guradia ist offline   Mit Zitat antworten
Alt 04.09.2004, 11:05  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
erweitere das auf /isU
Jepp das wars! Vielen Dank nochmal für deine schnelle Hilfe!
Corvin ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Nur bestimmten Html Code zulassen? litterauspirna PHP Tipps 2008 5 29.04.2008 12:30
einfacher Code zum Einbinden von "Inhaltsbereichen" MaxDittmann PHP-Fortgeschrittene 6 01.10.2007 15:54
FiFo macht Probs beim Css Code Matthiasnet HTML, Usability und Barrierefreiheit 10 18.08.2006 13:14
bb code in htm code wandeln janni PHP Tipps 2007 2 04.11.2005 22:36
[Erledigt] JS Code in PHP Code?? HTML, Usability und Barrierefreiheit 12 08.08.2005 15:45
Seite 1/2/3..Code was haltet ihr davon? Matthiasnet PHP Tipps 2005-2 4 29.07.2005 20:29
[Erledigt] Lesbarkeit von Code Off-Topic Diskussionen 6 14.07.2005 14:48
code aus db mit eval replacen chief-thomson PHP Tipps 2005-2 4 08.07.2005 15:33
Fehler im Code, kann ihn nicht finden PHP Tipps 2005 9 16.05.2005 16:17
Bestätigungmail code? PHP Tipps 2005 7 16.05.2005 13:18
[Erledigt] BB Code entfernen PHP Tipps 2005 2 25.04.2005 15:20
[Erledigt] bb code innerhalb von bb code geht nicht PHP Tipps 2007 2 12.01.2005 17:29
Problem mit COde PHP Tipps 2004 5 28.08.2004 16:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_replace include, preg replace include, html php code replace include file, preg_replace replacement function, replacement code, preg_replace zeit, preg_replace code ausführen, preg_replace replace php with html, php per preg_replace starten, preg_replace mit php, preg_replace replacement, php str_replace quelltext, preg_replace quelltext, pre_replace replacement as function, php preg_replace führt nur einmal aus php, php pre_replace on included php, preg_replace replacement php, preg_replace with include, preg_replca replacemtn funktion, php ereg_replace replacement

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:05 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.