Fragen zur Technik

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Fragen zur Technik

Beitrag von Ambience »

Hallo, also ich habe mal ne frage...

Ich bin gerade dabei ein Template system für mich zu schreiben, welches immer 3 dateien compiliert und in einem ordner als php speichert...

also spich eine header, content und footer datei... header und footer wird automatisch dazucompiliert.... wie schaff ich das nun zu überprüfen, ob sich inhaltlich einer template datei was geändert hat, um diese dann neu zu compilieren....

also man kann die klasse erstellen, und einen subdir angeben, in der die tpl dann liegt die aufgerufen wird...

und ich wollte das eigentlich so prüfen:

header
tpl
footer

das ganze als md5 file...

also so: header_5 . tpl_5 . footer_5

und dann gucken ob so eine datei schon existiert, aber irgenwie scheint das nicht so ganz zu klappen.


oder wie würdet ihr das machen?

ich mache es in meinem fall so:

Code: Alles auswählen

/**
  * Check if template is compiled or compile it
  *
  * @param string $_tpl
  * @return
  *
  **/
  function display($_tpl)
  {
    if ($this->_is_compiled($_tpl))
    {
      $hash_header = md5_file($this->templates_dir . $this->subdir . $this->header . $this->_tpl_Ex);
      $hash_footer = md5_file($this->templates_dir . $this->subdir . $this->footer . $this->_tpl_Ex);
      $hash_tpl_file = md5_file($this->templates_dir . $this->subdir . $_tpl . $this->_tpl_Ex);
    
      $end_hash = substr($hash_header . $hash_tpl_file . $hash_footer, 10, -60);
      
      include($this->compile_dir . $end_hash . $_tpl . $this->_tpl_Ex . '.php');
    }
    else
    {
      die('datei_noch_nicht_compiliert');
      if ($this->_compile_file($_tpl))
      {
        die('compilation erfolgreich');
      }
    }
  }
  
  /**
  * Check if Template already compiled
  *
  * @param string $_tpl
  * @return true/false
  *
  **/
  private function _is_compiled($_tpl)
  {
    $hash_header = md5_file($this->templates_dir . $this->subdir . $this->header . $this->_tpl_Ex);
    $hash_footer = md5_file($this->templates_dir . $this->subdir . $this->footer . $this->_tpl_Ex);
    $hash_tpl_file = md5_file($this->templates_dir . $this->subdir . $_tpl . $this->_tpl_Ex);
    
    $end_hash = substr($hash_header . $hash_tpl_file . $hash_footer, 10, -60);
    
    if (file_exists($this->compile_dir . $end_hash . $_tpl . $this->_tpl_Ex . '.php'))
    {
      return true;
    }
    else
    {
      return false;
    }
  }
aber so will es nicht klappen...
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Schau dir mal [php:filemtime] an. :wink:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag von Ambience »

hmm und wie soll ich das dann prüfen? wenn die datei in den letzen 5 min erstellt worden ist, dann includen andernfalls neu compilieren? das nützt nicht viel, weil wenn ich gerade was geändert habe, muss ich die 5 min warten...

oder wie stellst du dir das genau vor?
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Du vergleichst die Zeiten der compillierten und der nicht compillierten Dateien. Wenn die nicht compillierte neuer ist, wird neu compilliert, ansonsten wird die bereits compillierte verwendet.
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag von Ambience »

aha, sehr schlaue technik.... hmm aber.... ja mal gucken...
OnFire
Mitglied
Beiträge: 207
Registriert: 26.07.2006 18:59
Wohnort: Paderborn
Kontaktdaten:

Beitrag von OnFire »

Oder du kompilierst es von Hand neu, wenn du was geändert hast, was ja auch nicht alle 5 Minuten passieren sollte, daher ist der Aufwand eigentlich nich sooooo groß und es wird weit weniger Fehler geben.
Gruß
OnFire
Il y a plus des choses à changer dans l'avenir que dans le passé.
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag von Ambience »

hmm das ist eine template classe die selbst kompilieren sollte... das ist dafür gut, da ich ein gästebuch habe, das dann auf diese classe geupdatet wird, und wenn jemand was verändert, und nicht weiß wie das ganze geht, compiliert sich das ding von selber neu.
Benutzeravatar
Ambience
Mitglied
Beiträge: 628
Registriert: 02.09.2006 11:28
Wohnort: daheim
Kontaktdaten:

Beitrag von Ambience »

ehm S2B, funzt das auch wenn man die datei nur geändert hat? wäre da nicht besser zu suchen, nach last modified oderso?

EDIT: oh sry, das macht die funktion ja schon.

meinst du das dann so?

Code: Alles auswählen

private function _is_compiled($_tpl)
  {
    if (file_exists($this->compile_dir . $this->subdir . $_tpl . $this->_tpl_Ex . '.php'))
    {
      $get_update_header = filemtime($this->templates_dir . $this->header . $this->_tpl_Ex);
      $get_update_content = filemtime($this->templates_dir . $this->subdir . $_tpl . $this->_tpl_Ex);
      $get_update_footer = filemtime($this->templates_dir . $this->footer . $this->_tpl_Ex);
      
      $get_update_c = filemtime($this->compile_dir . $this->subbdir . $_tpl . $this->_tpl_Ex . '.php');
      
      if ($get_update_header >= $get_update_c OR $get_update_content >= $get_update_c OR $get_update_footer >= $get_update_c)
      {
        return false;
      }
      else
      {
        return true;
      }
    }
    else
    {
      return false;
    }
  }
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag von S2B »

Das sollte normal passen, ich würde allerdings von der Logik her eher > anstatt >= verwenden, auch wenn der Fall = wahrscheinlich nie eintreten wird. :wink:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Antworten

Zurück zu „Coding & Technik“