Author Topic: Nach Umszug von Strato auf 1und1 funzt Dirlist nicht mehr, beides bereits WB2.12  (Read 1249 times)

Offline Craxx

  • Posts: 259
Hallo,

ich habe eine Website von Strato WB Version 2.12 zu 1und1 umgezogen. Beides PHP 7.0
Leider funzte jetzt das Modul Dirlist nicht mehr es kommt folgende Fehlermeldung:

There was an uncatched exception
Call to undefined function ereg_replace()
in line (70) of (/modules/dirlist/class.parser.php):


Die class.parser.php hat folgenden Inhalt:
Code: [Select]
<?php
/**
* Simple TemplateParser Class
*
* @author  :  MA Razzaque Rupom <rupom_315@yahoo.com>, <rupom.bd@gmail.com>
*             Moderator, phpResource (http://groups.yahoo.com/group/phpresource/)
*             URL: http://www.rupom.info
*             Additional Features by
*             Ralf Hertsch, Berlin (Germany) - <hertsch@berlin.de>
* @version :  2.0
* Purpose  :  Parsing Simple Template File and Data that Contains Macros
* @abstract template Parsing
*/

class templateParser
{
 var $data = array();
   var 
$html "";

 /**
 * Initializes "macro=>value" array
 * @param Array "macro=>value" array
 * @return none
 */
   
function initData($data,$resetHTML=true)
   {
      
$this->data = array();
      
$this->data $data;
      if (
$resetHTML) unset($this->html);
   }

   
/**
 * Parses template file
 * @param template filename
 * @return parsed template
 */
   
function parseTemplateFile($templateFile)
   {
      
$searchPattern          "/\{([a-zA-Z0-9_]+)\}/i"// macro delimiter "{" and "}"
      
$replacementFunction    = array(&$this'parseMatchedText');  //Method callbacks are performed this way
      
$fileData               file_get_contents($templateFile);
      
$this->html            .= preg_replace_callback($searchPattern$replacementFunction$fileData);
      return 
$this->html;
   }

   
/**
 * Parses template data
 * @param template data
 * @return parsed data
 */
   
function parseTemplateData($templateData)
   {
      
$searchPattern          "/\{([a-zA-Z0-9_]+)\}/i"//macro delimiter "{" and "}"
      
$replacementFunction    = array(&$this'parseMatchedText');  //Method callbacks are performed this way
      
$this->html          preg_replace_callback($searchPattern$replacementFunction$templateData);
      return 
$this->html;
   }

   
/**
   * Callback function that returns value of a matching macro
   * @param Array $matches
   * @return String value of matching macro
   */
   
function parseMatchedText($matches)
   {
      return 
$this->data[$matches[1]];
   }

  function 
encodeSpecialChars(&$value) {
  
$value ereg_replace("ä","&auml;",$value);
  
$value ereg_replace("Ä","&Auml;",$value);
  
$value ereg_replace("ö","&ouml;",$value);
  
$value ereg_replace("Ö","&Ouml;",$value);
  
$value ereg_replace("ü","&uuml;",$value);
  
$value ereg_replace("Ü","&Uuml;",$value);
  
$value ereg_replace("ß","&szlig;",$value);
  
$value ereg_replace("€","&euro;",$value);
    return 
$value;
  }

  function 
decodeSpecialChars(&$value) {
   
$value ereg_replace("&auml;","ä",$value);
   
$value ereg_replace("&Auml;","Ä",$value);
   
$value ereg_replace("&ouml;","ö",$value);
   
$value ereg_replace("&Ouml;","Ö",$value);
   
$value ereg_replace("&uuml;","ü",$value);
   
$value ereg_replace("&Uuml;","Ü",$value);
   
$value ereg_replace("&szlig;","ß",$value);
   
$value ereg_replace("&euro;","€",$value);
    return 
$value;
  }

  
/**
  * Fügt dem "macro=>value" Array Werte hinzu und maskiert Sonderzeichen für die HTML Ausgabe
  * @param string $key Schlüssel
  * @param string $value Wert
  * @param boolean $encode=true Sonderzeichen maskieren
  */
function add($key,$value,$encode=true) {
  
$encode ? $this->data[$key]=$this->encodeSpecialChars($value) : $this->data[$key]=$value;
  }

  
/**
   * Entfernt einen Wert aus dem "macro=>value" Array
   *
   * @param string $key
   */
  
function delete($key) {
    unset(
$this->data[$key]);
  }

  
/**
   * Setzt das "macro=>value" Array zurück
   *
   */
  
function clear($resetHTML=false) {
  
$this->data = array();
    if (
$resetHTML) unset($this->html);
  }

  function 
echoHTML($resetHTML=true) {
  
echo $this->html;
    if (
$resetHTML) unset($this->html);
  }

  function 
getHTML($resetHTML=true) {
   
$result $this->html;
    if (
$resetHTML) unset($this->html);
    return 
$result;
  }

//End Of Class

/**
 * Fuer BookShop angepasste Variante des Parsers
 *
 * @author Ralf Hertsch, Berlin (Germany)
 */

?>


Vielleicht gibts inzwischen ja auch ein anderes Modul, was ähnlich funktioniert und neuer ist.
Vielen Dank für Eure Unterstützung.
Craxx

edit: Code formatiert
« Last Edit: June 06, 2018, 03:42:20 PM by dbs »
Craxx;)

Offline evaki

  • Posts: 2219
ereg_replace( auf beiden Versionen und nur einer diese Meldung?
Ist die Umgebung/inkl. Einstellungen wohl nicht dieselbe.

ereg_replace( war als deprecated gekennzeichnet, und mit 7.xx "verschwunden"/entfernt
Also sollte irgendwer das Modul korrigieren.

Für Codes bitte die Raute im Editor nutzen.

MfG. Evaki
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline dbs

  • Betatester
  • **
  • Posts: 7549
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Hallo, Code bitte immer mit dem Code-Button # einfügen.
Die schnellste Lösung für dich ist die gleiche PHP-Version wie bei Strato zu verwenden.

2. Lösung, den Codeabschnitt ab Zeile 69 austauschen mit diesem:
Code: [Select]
  function encodeSpecialChars(&$value) {
  $value = preg_replace("/ä/","&auml;",$value);
  $value = preg_replace("/Ä/","&Auml;",$value);
  $value = preg_replace("/ö/","&ouml;",$value);
  $value = preg_replace("/Ö/","&Ouml;",$value);
  $value = preg_replace("/ü/","&uuml;",$value);
  $value = preg_replace("/Ü/","&Uuml;",$value);
  $value = preg_replace("/ß/","&szlig;",$value);
  $value = preg_replace("/€/","&euro;",$value);
    return $value;
  }

  function decodeSpecialChars(&$value) {
    $value = preg_replace("/&auml;/","ä",$value);
    $value = preg_replace("/&Auml;/","Ä",$value);
    $value = preg_replace("/&ouml;/","ö",$value);
    $value = preg_replace("/&Ouml;/","Ö",$value);
    $value = preg_replace("/&uuml;/","ü",$value);
    $value = preg_replace("/&Uuml;/","Ü",$value);
    $value = preg_replace("/&szlig;/","ß",$value);
    $value = preg_replace("/&euro;/","€",$value);
    return $value;
  }

Ganz erledigt ist das Problem dann noch nicht, weil neue Fehlermeldungen im errorlog auftauchen.

Offline Craxx

  • Posts: 259
Hy Ihr beiden vielen Dank.
Wie bekomme ich den Code jetzt in # damit ich hier den Boardregeln mich gegenüber korrekt verhalte? Sorry dafür ;-)

Und auf Strato und 1und1 ist es PHP 7.0 also gleich???
Craxx;)

Offline Craxx

  • Posts: 259
@dbs

Super vielen lieben Dank, jetzt funzt es erstmal. DANKE.

Klasse wäre natürlich, wenn es da auch eine neue Variante gäbe wo es nix ins errorlog schreibt.
Craxx;)

Offline evaki

  • Posts: 2219
Ist das v0.2?
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline Craxx

  • Posts: 259
Craxx;)

Offline dbs

  • Betatester
  • **
  • Posts: 7549
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Da hoffen wir mal, dass einer mit Ahnung von PHP vorbeischaut.
Die nächsten Meldungen wären:
Quote
[E_NOTICE] /modules/dirlist/class.dirlist.php:[437] from /modules/dirlist/modify.php:[45] dirlist->dlgModify "Uninitialized string offset: -1"
[E_DEPRECATED] /modules/dirlist/class.dirlist.php:[525] from /modules/dirlist/modify.php:[45] dirlist->dlgModify "The each() function is deprecated. This message will be suppressed on further calls"
[E_NOTICE] /modules/dirlist/class.parser.php:[42] from /modules/dirlist/view.php:[49] dirlist->dlgView "Undefined property: templateParser::$html"

Meine Version
 *  v0.21 - 14.05.2008
 *    fixed:    problem reading WB settings from database
 *

Offline evaki

  • Posts: 2219
Kannste ja mal anhängen.
Hab' hier auch noch eine 0.29 -nennt sich aber KitDirList.
Weiß also im Moment noch nix genaues, muß oder sonstwer erstmal reinschauen, kommt vielleicht noch was...

Je nach Modul gabs da auch Abhängigkeiten (Kit). Falls da noch was dranhängt wirds u.U. spaßig -ähm
MfG. Evaki
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline Craxx

  • Posts: 259
ich hänge mal die 0.22 mit dem Fix von dbs an ;-)

Ja danach kam KitDirlist, da benötigt man noch ne Menge an anderem Kram, ist also aus meiner Sicht nicht brauchbar...
Craxx;)

Offline evaki

  • Posts: 2219
Hab gerade mal im Archiv gewühlt
0.17, 0.18, 0.20, 0.22, 0.29

Da werd ich zumindest mal reinschauen.
Vorerst läufts bei Dir ja (noch)   :-D

Aber vielleicht hat ja jemand schon....

MfG. Evaki

Die gepatchte 0.22 schreit bei der Installation bei mir zumindest vor Schmerzen.
Guck ich mir halt am Abend nochmal an.
« Last Edit: June 06, 2018, 04:09:09 PM by evaki »
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline Craxx

  • Posts: 259
freue mich darauf :-D

Wobei die 0.22 zip von mir nur aus Modules vom Server kopiert und gezippt war....
Craxx;)

Offline evaki

  • Posts: 2219
@dbs
Kleiner Zwischenbericht
Hab mich mal an v0.22 "rangemacht", unter php7 und MySql-strict.
Da ging "garnix", also erstmal strict abgeschaltet.
Konflikte mit Klassen (same name etc) und Funktionen (benötigte constructors) beseitigt.
Nun funktionierte es.  :-)
Aktuell Umschaltung auf php7.2 und somit neuer Spaß  (Y)
Wobei die each() function schon in Kürze auf der Abschußliste steht.
" templateParser::$html" Das kommt mir bekannt vor, aber bei meinem Gedächtnis mit Wegschmeißfunktion() bleibt nicht viel davon hängen.

Jedenfalls ist da noch was zu tun. Install und Deinstall käme noch vor MySQL-Anpassung dran
MySql-Strict hat wie üblich wg. unkorrekter Tabelleneinträge gemeckert, kommt sowieso erst am Schluß.

Vielleicht am Nachmittag ein neuer "Reinblick", hab noch anderes aufm Zettel. Je mehr man da drauf hat, wird Zeit zum kostbaren Gut.
MfG. Evaki

« Last Edit: June 07, 2018, 09:29:28 AM by evaki »
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline DarkViper

  • Forum administrator
  • *****
  • Posts: 2976
  • Gender: Female
Hab mir das Teil gestern Abend auch zu Gemüte geführt....  und ganz schnell wieder von der Platte gelöscht.
Da sind so viele Reparaturen nötig, um das Teil stabil und vor allem SICHER an's laufen zu bringen, da ist ein komplett neues Modul schneller und einfacher erstellt.
Da werden zwar Klassen benutzt, diese sind jedoch nichts anderes als einfache Funktionssammlungen ... und das auch noch im uralten PHP-4 Stil.
Haufenweise werden Parameter als ByReference übergeben, so dass erst mal ein Studium des "Codes" nötig ist, um festzustellen, wo sich die Änderungen überhaupt überall auswirken..
Also halbwegs übersichtlicher Code ist etwa das Gegenteil des vorhandenen.
« Last Edit: June 07, 2018, 10:31:22 AM by DarkViper »
Der blaue Planet - er ist nicht unser Eigentum - wir haben ihn nur von unseren Nachkommen geliehen

"You have to take the men as they are… but you can not leave them like that !" :-P
Das tägliche Stoßgebet: Oh Herr, wirf ihnen Hirn vom Himmel !

Offline Craxx

  • Posts: 259
Vielen Dank an Euch beide :-D

Freue mich wenn was kommt, gefixed oder neu.

Liebe Grüße
Craxx
Craxx;)

Offline dbs

  • Betatester
  • **
  • Posts: 7549
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Also Manu, statt nur zu meckern, hättest ja auch noch ein paar Tipps dalassen können um 1 oder 2 Probleme zu lösen. :-)
Dazu muss man nicht gleich den ganzen Code studieren.

Das Modul ist jedenfalls nicht schlecht, wenn man nur mal eine kleine Liste von Downloads anbieten will.
Die DownloadGallerie wird ja auch nicht gerade empfohlen, wenn ich mich recht erinnere.

Irgendwas muss man aber nehmen.

Offline dbs

  • Betatester
  • **
  • Posts: 7549
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Quote from: evaki
" templateParser::$html" Das kommt mir bekannt vor, aber bei meinem Gedächtnis mit Wegschmeißfunktion() bleibt nicht viel davon hängen.
Ja, kommt mir auch bekannt vor aus Modulen wie feedback und noch eins. Ich schau mal.

Offline dbs

  • Betatester
  • **
  • Posts: 7549
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Ich hab jetzt mal in die class.dirlist.php geschaut, Zeile 231
Der angepasste Code sieht so aus (3 Zeilen mit Kommentar dahinter):
Code: [Select]
class dirlist extends sql_dirlist {

  var $is_Frontend;
  var $pageLink;
  var $page_id;
  var $section_id;

  /**
   * Constructor
   *
   * @param INT $sectionID
   * @param INT $pageID
   * @param ARRAY $language
   * @param BOOL $isFrontend
   * @return dirlist
   */
  // function dirlist($pageID, $sectionID, $isFrontend=true) {
  public function __construct($pageID, $sectionID, $isFrontend=true) {    // <<<<<<<<<<<<<<<<<<<< geändert
    parent::__construct();                    // den constructor der elternklasse aufrufen <<<<<<<<<<  neu
    // $this->sql_dirlist();                            <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< weg damit
    $this->record = array();
    $this->is_Frontend = $isFrontend;
    $this->pageLink = '';
    $this->page_id = $pageID;
    $this->section_id = $sectionID;
    if (!$this->sql_getPageLinkByID($this->page_id,$this->pageLink)) {
    $this->print_error(); }
    else {
      $settings = $this->sql_getWBSettings();
    $this->pageLink = WB_URL.$settings['pages_directory'].$this->pageLink.$settings['page_extension'];  }
  }

Vielleicht ist es richtig so? :)

Offline evaki

  • Posts: 2219
Soweit ich mit nem kurzen Überfliegen sehen konnte, ist das exakt mitdem überein, was ich schon fertiggestellt habe.
Quote
Evaki: Konflikte mit Klassen (same name etc) und Funktionen (benötigte constructors) beseitigt.
Trotzdem Dank, da mich das in meinem Vorgehen bestätigt und natürlich motiviert, auch zukünftig "sowas" anzugehen.
Gefragt ist jetzt halt die Parsergeschichte (templateParser::$html) und each(), wobei letzteres durch ein Konstrukt XY ersetzt werden muß, soweit ich die bisher gelesenen Netzbeiträge verstanden habe. Den Kram mit foreach und anderem Schleifengedaddel inkl. Sortierungen habe ich mir bisher noch nie angetan. Ob ich das jetzt unbedingt heute oder morgen bringen muß, oder ein gescheiter Tip die Lösung etwas näher bringt -weiß nich. Bin ja schon froh mich mit etwas Logik solchen Sachen nähern zu können.
Wir schaun mal was kommt  :-D Der Tag ist ja noch jung.
MfG. Evaki

Nachtrag: Du lagst anscheinend richtig mit dem Parsergedöns  (Y) Hab eben mal das Forum durchsucht. Dann guck ich halt mal später, wie ich das verwerten kann. Pause=Schulz

« Last Edit: June 07, 2018, 01:05:28 PM by evaki »
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline evaki

  • Posts: 2219
Anscheinend ists doch "nur" noch each().
Wir werden sehen...
MfG. Evaki
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline evaki

  • Posts: 2219
Zwischenstand: " Nur zum Testen! "
v23c
php 7.2
MySql NONstrict

each() ist noch offen

Bitte um Rückmeldungen

MfG. Evaki
p.s. " templateParser::$html" Fehler barg eine Überraschung. Es war in irgendeiner Version wohl dort ein Punkt reingerutscht, wo er nicht hingehört. Dachte zuerst, es wäre ein Fleck aufm LCD, aber nee nich. Un sowat sollste als Laie finden -tröteröööö Da wirste allein von Gucken blöd.
« Last Edit: June 07, 2018, 02:57:05 PM by evaki »
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline dbs

  • Betatester
  • **
  • Posts: 7549
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Sehe mit der Version nur noch 2 Meldungen.
Code: [Select]
[E_NOTICE] /modules/dirlist/class_dirlist.php:[444] from /modules/dirlist/modify.php:[45] dirlist->dlgModify "Uninitialized string offset: -1"
[E_DEPRECATED] /modules/dirlist/class_dirlist.php:[532] from /modules/dirlist/modify.php:[45] dirlist->dlgModify "The each() function is deprecated. This message will be suppressed on further calls""

Offline evaki

  • Posts: 2219
Die Notiz
Quote
[E_NOTICE] /modules/dirlist/class_dirlist.php:[444] from /modules/dirlist/modify.php:[45] dirlist->dlgModify "Uninitialized string offset: -1"
wundert mich, weil es die einzige ist, die ich noch nicht zu Gesicht bekommen habe.
Kannste Dein/e System/Konfiguration angeben? Vielleicht krieg ichs ja dann auch zu sehen.  :-D
MfG. Evaki
Einmal Pizza Quattro Stagioni bitte, aber ohne Herbst.

Offline dbs

  • Betatester
  • **
  • Posts: 7549
  • Gender: Male
  • tioz4ever
    • WebsiteBaker - jQuery-Plugins - Module - Droplets - Tests
Lösung für each()
class_dirlist.php Zeile 532 (auskommentiert und darunter neu eingefügt)
Code: [Select]
    // while (list($key,$val) = each($media_dirs)) {
      foreach ($media_dirs as $key => $val) {

Quote
Kannste Dein/e System/Konfiguration angeben? Vielleicht krieg ichs ja dann auch zu sehen
PHP7.2.6
utf8mb4
mysql5.7

Offline DarkViper

  • Forum administrator
  • *****
  • Posts: 2976
  • Gender: Female
Ich hab mir den Parser mal 'kurz' vorgenommen....
Da war noch eine ganze Reihe mehr Probleme drin als nur das $html.

so mehrere &$this->  aufrufe... was seit (glaub) 5.3 falsch ist.. (in PHP-4 hat das noch gepasst)
noch ein paar ByRef-Aufrufe..  etc.etc..

Es sind übrigens auch fast alle Dateien noch Windooflike...
Also noch umstellen auf utf-8, 4 Leerstellen anstatt Tabs und LF am Zeilenende anstatt CRLF

ach ja.. das auch noch:  Wenn man durchgehend utf-8 benutzt, wird die ganze html-entity-Schieberei auch noch überflüssig
« Last Edit: June 07, 2018, 03:30:48 PM by DarkViper »
Der blaue Planet - er ist nicht unser Eigentum - wir haben ihn nur von unseren Nachkommen geliehen

"You have to take the men as they are… but you can not leave them like that !" :-P
Das tägliche Stoßgebet: Oh Herr, wirf ihnen Hirn vom Himmel !