Ergebnis 1 bis 8 von 8

Thema: Ersatz für "eval" php 7.1.18

  1. #1
    Benutzer Avatar von Masterix
    Registriert seit
    03.05.2008
    Ort
    Stuttgart
    Beiträge
    137

    Ersatz für "eval" php 7.1.18

    Ich nutze ein Plugin von "Cyb" das die Onlineanzeige anpasst.

    Hierin wird im Code Folgendes verwendet:
    Code:
    ...
    eval('$cyb_vilxh = "' . fetch_template('cyb_lastxhoursvisitors') . '";'); 
    ...
    Wie kann ich dies eval ersetzen. Ich bin nicht so firm in Sachen PHP und die Recherche im Netz dazu verwirrt nur mehr als dass sie hilft.
    Ich würde das Tool gerne weiter nutzen, auch unter PHP 7.x

    Kann mir da jemand weiterhelfen oder auf die richtigen Gleise bringen?

    Mit Dank im Voraus...
    Gruß, Masterix

    --

  2. #2
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    43
    Beiträge
    2.161
    Blog-Einträge
    1
    Welche vB-Version hast du? Falls du noch die angegebene 3.8.11 nutzt, dann ist obiges Konstrukt der vB-Standard um Templatecode auszuführen. Und das geschätzte 3845 mal im Code (die Zahl ist natürlich Quatsch ). Hinzu kommen noch alle Plugins, die ebenfalls auf eval setzen. Falls eval dir Probleme bereitet, dürfte dort gar nichts mehr laufen und nicht nur die von dir zitierte Codezeile.

    Es spricht nichts gegen einen Einsatz von eval unter PHP 7. Bekommst du irgendwelche Fehlermeldungen?
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

  3. #3
    Benutzer Avatar von Masterix
    Registriert seit
    03.05.2008
    Ort
    Stuttgart
    Beiträge
    137
    Zitat Zitat von Boothby Beitrag anzeigen
    Welche vB-Version hast du? Falls du noch die angegebene 3.8.11 nutzt, dann ist obiges Konstrukt der vB-Standard um Templatecode auszuführen. Und das geschätzte 3845 mal im Code (die Zahl ist natürlich Quatsch ). Hinzu kommen noch alle Plugins, die ebenfalls auf eval setzen. Falls eval dir Probleme bereitet, dürfte dort gar nichts mehr laufen und nicht nur die von dir zitierte Codezeile.

    Es spricht nichts gegen einen Einsatz von eval unter PHP 7. Bekommst du irgendwelche Fehlermeldungen?
    Ja, ich sah hier den Wald vor lauter Bäumen nimmer.

    Der wirkliche Fehler scheint eine "Splitfunktion zu sein.
    ErrorTrace:
    Call to undefined function split() in ..../index.php(596) : eval()'d code on line 1
    ($hook = vBulletinHook::fetch_hook('forumhome_complete')) ? eval($hook) : false;

    Fehlerhafte Zeile:
    Code:
    if ($vbulletin->options['cyb_visitorslastx_enable'] AND !is_member_of($vbulletin->userinfo, split(',', $vbulletin->options['cyb_visitorslastx_exclgroups']))) 
    Hab das nun mit preg_split ersetzt, das funktioniert auch - scheinbar - mal abwarten.

    Nachtrag für die ähnlich gequälte Nachwelt, hier musste zur neuen Funktion (preg_split) noch ein "Delimiter" ergänzt werden:
    Zuvor Fehlerhaftes funktioniert nun so ohne Fehler in PHP 7.1.18
    Code:
    if ($vbulletin->options['cyb_visitorslastx_enable'] AND !is_member_of($vbulletin->userinfo, preg_split('~,~', $vbulletin->options['cyb_visitorslastx_exclgroups'])))

    BtW: Habe noch ein anderes PHP-Problem.

    Code:
     PHP Warning:  preg_replace_callback(): Requires argument 2, 'stripslashes('$1').((++$_xx%2)?'alt1':'alt2').stripslashes('$2').(($_xx%2)?'alt1':'alt2')', to be a valid callback in /var/www/vhosts/my.tld/httpdocs/index.php(67) : eval()'d code on line 9\n', ....
    Original und auslösende Funktion:
    Code:
    $fb2p =  preg_replace_callback( 
    '#(<tr>[^<]*?<td class=\\\\")alt2(.*?<td class=\\\\")alt1#eis',  
    "stripslashes('$1').((++\$_xx%2)?'alt1':'alt2').stripslashes('$2').((\$_xx%2)?'alt1':'alt2')", $fb2p); 
    $vbulletin->templatecache['FORUMHOME'] = $fb2p;
    
    Fällt dir dazu etwas ein?

    Dank und Gruß, Masterix
    Geändert von Masterix (18.08.2017 um 10:38 Uhr)
    Gruß, Masterix

    --

  4. #4
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    43
    Beiträge
    2.161
    Blog-Einträge
    1
    Moin moin.

    Nimm mal statt preg_split lieber explode. http://php.net/manual/de/function.explode.php

    Zum 2. Ausdruck: ich sehe eine Lösung bin aber nur mit Handy unterwegs. Hoffe es klappt

    PHP-Code:
    $fb2p =  preg_replace_callback
    '#(<tr>[^<]*?<td class=\\\\")alt2(.*?<td class=\\\\")alt1#eis',
    function(
    $treffer){$tr1=$treffer[1];$tr2=$treffer[2];
    return 
    "stripslashes('$tr1').((++\$_xx%2)?'alt1':'alt2').stripslashes('$tr2').((\$_xx%2)?'alt1':'alt2')";}, 
    $fb2p); 

    $vbulletin->templatecache['FORUMHOME'] = $fb2p
    Puuh, aber ungetestet.
    Geändert von Boothby (19.08.2017 um 06:43 Uhr)
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

  5. #5
    Benutzer Avatar von Masterix
    Registriert seit
    03.05.2008
    Ort
    Stuttgart
    Beiträge
    137
    Zitat Zitat von Boothby Beitrag anzeigen
    Moin moin.

    Nimm mal statt preg_split lieber explode. http://php.net/manual/de/function.explode.php

    Zum 2. Ausdruck: ich sehe eine Lösung bin aber nur mit Handy unterwegs. Hoffe es klappt

    PHP-Code:
    $fb2p =  preg_replace_callback
    '#(<tr>[^<]*?<td class=\\\\")alt2(.*?<td class=\\\\")alt1#eis',
    function(
    $treffer){$tr1=$treffer[1];$tr2=$treffer[2];
    return 
    "explode('$tr1').((++\$_xx%2)?'alt1':'alt2').explode('$tr2').((\$_xx%2)?'alt1':'alt2')";}, 
    $fb2p); 

    $vbulletin->templatecache['FORUMHOME'] = $fb2p
    Puuh, aber ungetestet.
    Ungetestet, aber funktioniert exakt wie vorstehend - mit nur einer neuen Warnung.

    Code:
    Got error 'PHP message: PHP Warning:  preg_replace_callback(): The /e modifier is no longer supported, use preg_replace_callback instead
    Diese Fehlermeldungen... Wo ist da jetzt bitte ein /e modifier zu finden.

    Aber erstmal einen herzlichen Dank für die Hilfe bisher.


    Nachtrag, hab Stripslashes durch explode ausgetauscht.
    Funktioniert auch, allerdings noch immer mit der Warnung im Error.log wie zuvor angegeben...
    Geändert von Masterix (19.08.2017 um 08:22 Uhr) Grund: Nachtrag...
    Gruß, Masterix

    --

  6. #6
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    43
    Beiträge
    2.161
    Blog-Einträge
    1
    Zitat Zitat von Masterix
    Wo ist da jetzt bitte ein /e modifier zu finden.
    Ich denke mal an anderer Stelle, evtl anderes Add-on was den gleichen Hook verwendet.
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

  7. #7
    Benutzer Avatar von Masterix
    Registriert seit
    03.05.2008
    Ort
    Stuttgart
    Beiträge
    137
    Zitat Zitat von Boothby Beitrag anzeigen
    Ich denke mal an anderer Stelle, evtl anderes Add-on was den gleichen Hook verwendet.
    Hmmm...
    Laut Pluginsystem -> Einstiegspunkt (Hook) ist dieses Addon das einzige, das diesen forumhome_start Hook verwendet, auf den die Fehlermeldung
    Code:
     (index.php(67) ==> $hook = vBulletinHook::fetch_hook('forumhome_start')) ? eval($hook) : false;
    verweist.


    Nachtrag....
    Könnte auch ein Bug in php 7.x sein?

    Nachtrag 2.

    Auch ein fast blindes Huhn findet mal ein Korn
    Ich habe es scheinbar gefunden indem ich mit dem Hook "global complete", den das Plugin direkt nach dem "forumhome_start" nutzt, verglichen habe.
    Dort ist ein ähnliche Codezeile
    Code:
    "$output = preg_replace('#(<td class="tcat"[^>]*?>)(.*?)(</td>)#is', '$1<h4>$2</h4>$3', $output);"
    zu finden.

    Dort ist nach der letzten Raute der Codezeile, der "Modifier" (laut Internet sind das welche...) ohne "e" gesetzt. den habe ich dann auch testhalber aus dem Code beim "forumhome_start" Hook entfernt und klopfenden Herzens auf "Speichern und neuladen" geklickt.
    Dann, das Forum lief, im Errorlog keine dahingehende Meldung mehr, den Apachen neu gestartet und es funktioniert noch immer alles, nur ohne Fehlermeldung.

    Das wars also auch.
    Danke nochmal herzlich für deine Hilfe.

    Gruß, Masterix
    Geändert von Masterix (19.08.2017 um 10:10 Uhr)
    Gruß, Masterix

    --

  8. #8
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    43
    Beiträge
    2.161
    Blog-Einträge
    1
    Jo sollte so funktionieren. Der Callback ist eh überflüssig. Beim obigen Beispiel im übrigen auch, denke ich.
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

Aktive Benutzer

Aktive Benutzer

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

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 24.03.2009, 22:56
  2. Spalten "Letzter Beitrag", "Themen" & "Beiträge" für ein einziges Forum deaktivieren?
    Von System69 im Forum vBulletin 3.7 Fragen und Probleme
    Antworten: 2
    Letzter Beitrag: 08.12.2008, 00:34
  3. ">"">>>><meta http-equiv="Refresh" content="0;url=www.irgendeineurl.com">
    Von Majora im Forum vBulletin 3.6 Fragen und Probleme
    Antworten: 3
    Letzter Beitrag: 01.10.2006, 16:57
  4. Antworten: 3
    Letzter Beitrag: 24.05.2004, 13:14

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •