Zur Boardunity Forenstartseite
  #1  
Alt 29.02.2004, 21:59
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18

PHP-Code ausführen


Moin,

ich bin auch ziemlich begeistert von eurem System.
Nun möchte ich gerne in den Templates php-code ausführen lassen.
Habe aber leider mit meinen sehr beschränkten php-Fähigkeiten keine Möglichkeit dazu gefunden.

Fangen wir mal mit dem Footer an
Dort möchte ich

<? include("counter.php"); ?>

und

<?php
echo "Letzte Änderung: ";
$datei = filemtime(basename($PHP_SELF));
echo date("d.m.Y H:i:s", $datei);
?>

ausführen lassen.
Ist dies irgendwie zu bewerkstelligen?
  #2  
Alt 29.02.2004, 23:44
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18
Also, am besten wäre es, ich könnte den php-code direkt in die Templates oder in die Artikel schreiben.
Ich möchte auch größere php-codes einfügen, nicht nur z.b. ne Zahl wie beim Counter ausgeben lassen.

  #3  
Alt 01.03.2004, 12:51
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Das funktioniert wie in Link im gleichen Fenster öffnen Seiten mit Xmentor von mir erläutert. Prinzipiell kannst du sonstwas einbinden - riesen PHP-Anwendungen sind kein Problem. Schau dir den Code mal an...

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #4  
Alt 01.03.2004, 13:35
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18
Ich glaube, da werde ich dran verzweifeln.
Das, was du im besagten Topic geschrieben hast, hab ich ja noch ausgeben können.

Aber mein Counter, den ich so einbinde wollte produzierte schon nur noch Fehler. Der hatte anscheinend Probleme, über die system.class.php auf das Template zuzugreifen.

Und ein Befehl, möglicherweise in die system.class.php geschrieben oder in die index.php, der dem Server sagt, der soll auch den PHP-Code in den Templates parsen?
Gibt es sowas?
Das wäre natürlich ideal.

  #5  
Alt 01.03.2004, 14:06
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
PHP-Code:
$GLOBALS['Template']->load("datei",array("wert" => $variable)); 
PHP-Code in Templates gibt es nicht und kann es bei dem Template-System auch technisch nicht geben. Du kannst dir natürlich eine eval()-Funktion dazuprogrammieren...

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #6  
Alt 01.03.2004, 17:26
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Hi. Also... ich hab mir mal was ausgedacht:
Folgendes wäre dann die neue Template-Klasse (ich hoffe es ist ok, wenn ich sie komplett poste):
PHP-Code:
<?php
 
 
/* vim: set expandtab tabstop=4 shiftwidth=4: */
 // +----------------------------------------------------------------------+
 // | X-Mentor Version 1.2                                                 |
 // +----------------------------------------------------------------------+
 // | Copyright (c) 2003 - 2004 The Axtis Group                            |
 // +----------------------------------------------------------------------+
 // | X-Mentor is a simple, plain and fast WCMS for small portals and      |
 // | magazines. It makes use of PHP and MySQL in order to offer maximum      |
 // | performance as well as global support with most semi-professional      |
 // | webhosters. It is licensed under terms of the GPL (see license.txt)  |
 // +----------------------------------------------------------------------+
 // | Authors: Philipp Gérard <[email protected]>                            |
 // |          Jan Tilly <[email protected]>                                  |
 // +----------------------------------------------------------------------+
 
 /**
 * Templateklasse
 *
 * Diese Klasse verwaltet die Templatedateien und kann leicht erweitert
 * werden, um beispielsweise mehrere Sprachen mittels Sprachcontainern
 * zu verwalten.
 *
 * @package      X-Mentor 1.2.2
 * @param        -
 * @return         -
 * @access        public
 * @author        Philipp Gerard <[email protected]>
 * @version        1.0 23/12/2003 15:57
 */
 
class Template {
 
     
/**
     * Templateparser
     *
     * Diese Funktion laedt und parst Templatedateien mit dem übergebenen Array.
     * Sofern die Templatedatei nicht gefunden werden kann, wird eie Fehlermeldung
     * ausgegeben, die in der Klasse 'Error' definiert werden kann.
     *
     * @param        string    Templatedatei.
     * @param        array    Zu ersetzende Daten.
     * @param        string    Pfad zu den Templates
     * @return         string    Ergebnis
     * @access        public
     * @author        Philipp Gerard <[email protected]>
     * @version        1.0 23/12/2003 15:57
     */
     
function load($file,$array = array(),$path TPL_ROOT_F){
         
         
$array['sid'] = session_id();
 
             foreach(
$array as $key => $value) {
                 
$search[]  = '{'.$key.'}';
                 
$replace[] = $value;
             }
 
         if(
function_exists('file_get_contents')){
 
             
$contents = @file_get_contents($path.$file.'.tpl') or Error::tpl_error($path.$file.'.tpl',__LINE__,__FILE__);
 
         }
 
         else {
 
             
$contents implode("", @file($path.$file.'.tpl')) or Error::tpl_error($path.$file.'.tpl',__LINE__,__FILE__);
 
         }
         
         
$contents str_replace($search$replace$contents);
         
$contents preg_replace('`<php>(.*?)</php>`ies''$this->doPHP(\'\\1\')'$contents);
         
$contents preg_replace('`<phps>(.*?)</phps>`ies''$this->doPHPWithoutReturn(\'\\1\')'$contents);
         
         return 
$contents;
 
     }
     
     
/**
      * PHP-Funktion
      *
      * Mit dieser Funktion ist es möglich PHP-Code auszuführen.
      *
      * @param                PHP-Code (muss eine Funktion mit Rückgabewert sein!)
      * @return            Ergebnis des PHP-Codes
      * @author            TheDragonMaster <[email protected]>
      */
     
function doPHP($code) {
         
$code stripslashes($code);
             eval(
'$code = '.$code.';');
             return 
$code;
     }
 
     
/**
      * PHP-Funktion 2
      *
      * Mit dieser Funktion ist es möglich PHP-Code auszuführen.
      * Dieser Code darf keinen Rückgabewert besitzen!
      *
      * @param                PHP-Code (muss eine Funktion mit Rückgabewert sein!)
      * @return            Ergebnis des PHP-Codes
      * @author            TheDragonMaster <[email protected]>
      */
     
function doPHPWithoutReturn($code) {
         
$code stripslashes($code);
             eval(
$code);
             return 
'';
     }
     
 }
 
 
$GLOBALS['Template'] = &new Template();
 
 
?>
So... nun zur Erklärung. Mit dem Tag <php></php> kannst du Funktionen aufrufen, die einen Rückgabe-Wert haben. Und zwar NUR solche. "
Mit dem Tag <phps></phps> kannst du PHP-Code aufschreiben. Allerdings nichts ausgeben.
Mal gucken... vielleicht finde ich noch eine Lösung für die Kombination von beidem... "

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #7  
Alt 01.03.2004, 18:05
Zeitdenken Team
 
Registriert seit: 12.2003
Beiträge: 41
Setz doch ein print vor das eval() und buffer dann einen evtl. output...
Code:
function php($code) {
         $code = stripslashes($code);
         ob_start();
         eval('print '.$code.';');
         $return = ob_get_contents();
         ob_end_clean();
         return $return;
    }

  #8  
Alt 01.03.2004, 18:18
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Mhh... ok. Danke. Ich glaub ich weiß, was du meinst. Die Funktion "doPHPWithoutReturn" müsste also so aussehen: (ok... name stimmt dann nicht mehr)
PHP-Code:
function doPHPWithoutReturn($code) {
     
$code stripslashes($code);
     
ob_start();
     eval(
$code);
     
$return ob_get_contents();
     
ob_end_clean();
     return 
$return;
 } 


So... das müsste klappen.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #9  
Alt 01.03.2004, 18:19
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Irgendwie ist der BB-Parser vom vBulletin ebensogut wie der vom X-Mentor rc1

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #10  
Alt 01.03.2004, 22:13
Zeitdenken Team
 
Registriert seit: 12.2003
Beiträge: 41
Zitat:
Zitat von TheDragonMaster
Mhh... ok. Danke. Ich glaub ich weiß, was du meinst. Die Funktion "doPHPWithoutReturn" müsste also so aussehen: (ok... name stimmt dann nicht mehr)
mit der Lösung solltest du i.G. gänzlich auf do w/o verzichten können - wenn es einen output gibt, gibt die Funktion einen Rückgabe wert zurück, andernfalls nicht...

  #11  
Alt 02.03.2004, 11:38
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18
Ich bekomme diese Fehlermeldung:

Parse error: parse error in ...xmentor/inc/template.class.php(89) : eval()'d code on line 1

Zeile 89:
eval('$code = '.$code.';');


Kann es sein, das mein Server nicht das nötige Handwerkszeug mitbringt?

  #12  
Alt 02.03.2004, 13:14
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Ne. Ist noch simpler.
Du hast nen Syntax-Error in dem Template.

@Jan: Jo. Stimmt auch wieder... "

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #13  
Alt 02.03.2004, 13:50
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18
Sicher?
Mein Server sagt:

output_buffering no value no value

und ich glaube mal gehört zu haben, dass das dafür nötig ist.

  #14  
Alt 02.03.2004, 14:19
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Da bin ich zwar nicht der Profi, aber "no value" ist AFAIK ok. Steht bei mir auch, funktioniert aber trotzdem.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #15  
Alt 02.03.2004, 14:29
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18
Hmm,k

Sollte php-code dann auch in artikeln funktionieren?

Oder nur in Templates

  #16  
Alt 02.03.2004, 14:51
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Für Artikel müsste man die entsprechenden Klassen bearbeiten. Also da klappt es nicht.
Würde ich aber auch als nicht sonderlich sinnvoll erachten... "

Ich glaube aber, dass ich nun weiß, wo der Fehler oben lag...
Verwende einfach den PHPS-Tag. Mit dem sollte das alles gehen... wenn ich nachher Zeit habe mache ich die ganze Klasse nochmal richtig... (hier per Copy & Paste geht irgendwie nicht, weil ich den WYSIWYG-Editor noch nicht bedienen kann... ")

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #17  
Alt 02.03.2004, 15:13
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18
Hmm, grade für Artikel bräuchte ich das.

Ich habe Artikel, die nur per Passwort zu sehen sein sollen.
Das User-Passwort-Session (oder wie auch immer) System hab ich hier.
Da müßte nun nur noch in die Artikel der entsprechende php-code rein...

  #18  
Alt 02.03.2004, 15:58
Zeitdenken Team
 
Registriert seit: 12.2003
Beiträge: 41
Bei Artikeln bräuchte man das entsprechende Tag in der bb.class.php - Meiner Meinung nach ist dieser Mischmasch aus Templates, Inhalten und PHP aber a) kein guter Stil b) sicherheitstechnisch ein Scheunentor

  #19  
Alt 02.03.2004, 16:12
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Scheunentor? Sternentor!

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #20  
Alt 02.03.2004, 18:27
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Also... das würde ich auch eher Serverseitig lösen....

Du musst einfach dein Session-System direkt in den Code integrieren. Das sollte auch kein Problem sein... ich melde mich nachher mal bei dir... dann kann ich dir erklären, wie ich es machen würde.

@Jan & Phillipp: In gewissen Maßen finde ich Template-Scripting sehr gut.
Es verringert die Zahl der Templates, was die Übersicht steigern kann und gibt dem User/Administrator mehr Möglichkeiten einfluss auf die Funktionen zu nehmen, ohne den PHP-Code bearbeiten zu müssen.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #21  
Alt 02.03.2004, 18:35
Benutzerbild von Philipp Gérard
Zeitdenken
 
Registriert seit: 09.2003
Ort: Wien
Beiträge: 832
Naja, PHP muss er ja trotzdem können, du parst ja nur PHP-Code aus Templates. Da soll der Benutzer lieber gleich den Weg über die PHP-Dateien gehen. Aber das sei jedem überlassen...

__________________
Philipp Gérard
Gewöhnliche Menschen denken nur daran, wie sie ihre Zeit verbringen. Ein intelligenter Mensch versucht sie zu nützen. - Arthur Schopenhauer
  #22  
Alt 03.03.2004, 10:40
Mitglied
 
Registriert seit: 02.2004
Beiträge: 18
K, danke soweit.

@TDM
Wäre nat. toll, du könntest mir bei der Integration meines Systems unter die Arme greifen. Allerdings dürfte das was aufwendiger werden

Als Alternative bliebe mir noch, wenn ich php nicht in Artikeln nutze, das ganze über I-Frames laufen zu lassen. Wobei dass auch nicht Sinn der Sache sein soll und den Verwaltungsaufwand doch wieder erheblich steigert.

  #23  
Alt 03.03.2004, 12:16
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Wie gesagt. Einzelne Kategorien (oder sogar Einträge) Passwort zu schützen sollte wirklich ein Spaziergang werden. Das einzige, was ich da doch etwas "kritisch" sehe ist die Einbindung eines Sessions-Systemes.
Was ich damit meine ist folgendes:
Es ist einfacher, ein Session-System an etwas anzupassen, als etwas an ein Session-System anzupassen.

Es wäre also deutlich einfacher, wenn du einfach eine SQL-Tabelle mit der IP des Users, dem verwendeten Passwort (MD5-Verschlüsselt), der Lesezeit und der ID des Artikels / der Kategorie (der/die freigeschaltet wurde) anlegen würdest und danach wirklich nur ein Minimum des X-Mentor Codes anpassen würdest, als wenn du versuchen würdest den X-Mentor an dein Session-System anzupassen... obwohl auch das machbar sein sollte (aufwand natürlich deutlich grösser).

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
 


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.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
html in php wandeln eBoy Programmierung und Datenbanken 16 30.03.2005 16:52
Zend's PHP 5 Programmierwettbewerb... Fabchan Programmierung und Datenbanken 9 14.07.2004 22:37
Das PHP Forum 4 all ShadowByte Projektvorstellung und Bewertung 4 22.06.2003 21:12






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25