php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 15-02-2009, 19:59
Laire
 Registrierter Benutzer
Links : Onlinestatus : Laire ist offline
Registriert seit: May 2004
Beiträge: 739
Laire ist zur Zeit noch ein unbeschriebenes Blatt
Standard [PHP5] [Optimierung] Platzhalter durch Inhalt externe Datei ersetzen

Hallo,

ich schreibe gerade an einem kleinen CMS System. Ich möchte es ermöglichen durch einen einfachen Text im Editor den Inhalt von externen Datein aus einem bestimmten Verzeichnis einzubinden.

Zur Erklärung:
- Die Dateien müssen im Verzeichnis includes liegen
- php Code soll nicht interpretiert werden
- Wenn die Datei nicht existiert soll eine Fehlermeldung kommen
- der Befehl zum einbinden ist: include[Dateiname]


PHP-Code:
// Überprüfung ob in dem Text ein include vorkommt
if(stripos($output'include[') !== FALSE){
    
//Wenn ja dann alle raussuchen
    
preg_match_all("/include\[(.*?)\]/U"$output$include);
    
//Ergebnisse verarbeiten
    
foreach($include[0] as $key => $var){
        
//Pfad und Dateiname festlegen
        
$file 'includes/'.$include[1][$key];
        
//Überprüfen ob Dateiname existiert 
        
if(file_exists($file)){
            
//Wenn ja dann Inhatlt der Datei holen
            
$content file_get_contents($file);
        }else{
            
//Wenn nicht dann Fehlermeldung 
            
$content '<h1>Die eingebundene Datei exestiert nicht!</h1>';
        }
        
//Ersetzten des include durch Dateiinhalt bzw. Fehlermeldng
        
$output = (str_replace($var$content$output));
    }

Meine Fragen:
Macht es Sinn vorher zu Überprüfen ob es ein include gibt? Habe das eingebaut weil bei php.net folgendes steht über preg_match, gilt bestimmt auch für preg_match_all:
Zitat:
Verwenden Sie nicht preg_match(), wenn Sie nur überprüfen wollen, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist. Verwenden Sie dafür stattdessen die Funktionen strpos() oder strstr(), die das schneller erledigen.
Die Lösung funtioniert, aber würdet Ihr anders herangehen?
Mit Zitat antworten
  #2 (permalink)  
Alt 15-02-2009, 20:30
php_fussel
 Newbie
Links : Onlinestatus : php_fussel ist offline
Registriert seit: Jan 2009
Beiträge: 120
php_fussel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn Du ein "kleines" CMS programmieren willst, empfehle ich Dir eine template-Klasse ...

Gruß php_fussel
Mit Zitat antworten
  #3 (permalink)  
Alt 15-02-2009, 20:35
Laire
 Registrierter Benutzer
Links : Onlinestatus : Laire ist offline
Registriert seit: May 2004
Beiträge: 739
Laire ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das ist doch schon erledigt... Ausserdem wird es kein öffentliches CMS sondern nur für eine Seite.
Mit Zitat antworten
  #4 (permalink)  
Alt 15-02-2009, 20:46
php_fussel
 Newbie
Links : Onlinestatus : php_fussel ist offline
Registriert seit: Jan 2009
Beiträge: 120
php_fussel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Irgendwie ist es schwer verständlich, was Du bezweckst ...! Du schreibst, Du willst in einem Text vorkommende include()s raussuchen und diese dann durch externen Text aus einer Datei ersetzen oder was ...? Ich versteh nicht was das soll!
Mit Zitat antworten
  #5 (permalink)  
Alt 15-02-2009, 20:53
Laire
 Registrierter Benutzer
Links : Onlinestatus : Laire ist offline
Registriert seit: May 2004
Beiträge: 739
Laire ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also,

das ganze CMS System ist nur für eine Seite. Es gibt bereits fertige Inhalte, die als html Datei vorliegen. Um nun ständiges Paste&Copy zu vermeiden kann man ganz einfach in dem online WYSIWYG Editor der Unterseiten include[Dateiname] eingeben und der Text wird ersetzt durch den Inhalt der Datei. Dieses ist nicht die include() Funktion von PHP.

Ich setzte das ein, da es an einigen Stellen zum Einsatz von Javascript kommt und die Struktur für die Elemente sehr genau sein müssen, was in dem WYSIWYG ziemlich blöd zu bearbeiten ist. An diese Dateien müssen auch evtl. andere Nutzer nicht ran, da sie einen festen Inhalt haben.
Mit Zitat antworten
  #6 (permalink)  
Alt 15-02-2009, 23:02
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard Re: [PHP5] [Optimierung] Platzhalter durch Inhalt externe Datei ersetzen

Zitat:
Original geschrieben von Laire
Macht es Sinn vorher zu Überprüfen ob es ein include gibt?
1. Nein, weil Sinn nicht gemacht wird ... ;-)
2. Nein, weil file_get_contents() FALSE zurückliefert, wenn die Datei nicht existiert. Und diesen Rückgabewert würde ich abfragen. Dass man zu diesem Zweck file_get_contents() besser mit dem @-Operator versieht, weil sonst eventuell eine dämliche Warnung ausgegeben wird, ist zwar nicht besonders elegant -- aber wir spielen hier ja auch mit PHP und nicht mit einer seriösen Programmierumgebung. ;-)

Zitat:
Habe das eingebaut weil bei php.net folgendes steht über preg_match, gilt bestimmt auch für preg_match_all:

Zitat:
Verwenden Sie nicht preg_match(), wenn Sie nur überprüfen wollen, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist. Verwenden Sie dafür stattdessen die Funktionen strpos() oder strstr(), die das schneller erledigen.
Und was hat das mit dem Überprüfen der Existenz einer Datei zu tun?

Nebenbei ist dieser Hinweis unvollständig. Es gibt auch noch andere sinnvolle Anwendungen der preg_...()-Funktionen. Ein Beispiel: Solange PHP keine eingebauten Unicode-Strings (und dazu passende Funktionen) hat, ist die PCRE-Erweiterung beim Hantieren mit UTF-8-Zeichenketten doch sehr hilfreich.

Zitat:
PHP-Code:
preg_match_all("/include[(.*?)]/U"$output$include); 
Ja, wenn du dich beim Basteln von PCRE so ungeschickt anstellst, dann solltest du vielleicht tatsächlich dem Rat des PHP-Handbuchs folgen und nur strpos(), strstr() und Konsorten einsetzen. ;-)
Erst machst du den Regex mit "/U" UNGREEDY und dann drehst du den Effekt mit ".*?" wieder um ... "(.*)" ohne "/U" am Ende hätts sicher auch getan.

Geändert von fireweasel (15-02-2009 um 23:06 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 15-02-2009, 23:13
Laire
 Registrierter Benutzer
Links : Onlinestatus : Laire ist offline
Registriert seit: May 2004
Beiträge: 739
Laire ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: [PHP5] [Optimierung] Platzhalter durch Inhalt externe Datei ersetzen

Zitat:
Original geschrieben von Laire
Meine Fragen:
Macht es Sinn vorher zu Überprüfen ob es ein include gibt? Habe das eingebaut weil bei php.net folgendes steht über preg_match, gilt bestimmt auch für preg_match_all:


Die Lösung funtioniert, aber würdet Ihr anders herangehen?
War bezogen auf das stripos am Anfang, ich könnte das ja weglassen und gleich mit preg_match_all arbeiten.

Bei

PHP-Code:
 preg_match_all("/include[(.*?)]/U"$output$include); 
hatte ich angenommen, das (.*?) steht einfach nur für "alle zeichen dazwischen"
Mit Zitat antworten
  #8 (permalink)  
Alt 16-02-2009, 00:28
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard Re: Re: [PHP5] [Optimierung] Platzhalter durch Inhalt externe Datei ersetzen

Zitat:
Original geschrieben von Laire
War bezogen auf das stripos am Anfang, ich könnte das ja weglassen und gleich mit preg_match_all arbeiten.
Ach sooo ...
In dem Fall ist ein davorgesetztes stripos() natürlich Quark. Im Falle des Nichtvorhandenseins von 'include[' ackert das erst den ganzen Text durch und das auch noch case-insensitive. Das Gleiche macht preg_match() doch auch, du solltest allerdings den Modifikator '/i' nicht vergessen, wenn du auch Großbuchstaben finden möchtest.

Zitat:
Bei

PHP-Code:
 preg_match_all("/include[(.*?)]/U"$output$include); 
hatte ich angenommen, das (.*?) steht einfach nur für "alle zeichen dazwischen"
Also, ich sach ma so:
Das '.' steht für (fast) jedes beliebige Zeichen.
Das '*' steht für eine beliebige Anzahl (inklusive Null).
Das '?' steht (hier) für den kürzestmöglichen Teilstring, der auf das Suchmuster passt.
Wenn du das dämliche '/U' weglässt. Mit '/U' kehrt sich die Funktion des '?' um.

Und ich würde sogar soweit gehen, dir folgenden RegEx vorzuschlagen:
PHP-Code:
'/include\[[^\]]+\]/i' 
Das findet 'include' (Groß-/Kleinschreibung egal),
gefolgt von einer '[',
gefolgt von mindestens einem (fast) beliebigen Zeichen[1], das aber kein ']' ist,
gefolgt von ']'.

--

[1] Du trägst ja hier Dateinamen ein. Und die sollten schon mindestens ein Zeichen haben.
[2] Ach, und wie immer den richtigen RegExp bitte über die Zitieren-Funktion kopieren. Sonst fehlen einige Backslashes. Gibts denn von dieser dämlichen Board-Software nicht mittlerweile eine aktualisierte Version, die Benutzer-Eingaben mit Verstand behandelt?

Geändert von fireweasel (16-02-2009 um 00:46 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:56 Uhr.