Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Hier bekommst Du deutschsprachigen Support. Keine Fehlermeldungen oder Erweiterungswünsche bitte!
Post Reply
Old Boy
Posts: 1104
Joined: Fri 23. Nov 2012, 13:52

Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by Old Boy » Thu 20. Dec 2018, 17:25

Hallo Freunde,

seit Jahren habe ich das Script {RANDOMCP:xxx} unter PHP 5.6 im Einsatz, welches bei jedem Seitenaufruf aus einem verborgenen Artikel einen ContentPart "zufällig" heraussucht und im aktuellen Artikel ablegt.
Das klappte auch ohne Probleme, bis jetzt :cry:

Nun zwingt mich 1und1 aber auf PHP 7.2 umzustellen ... und nun ist es Essig mit dem Script.
Es wird nun nur noch eine weisse Seite ausgegeben. Das ist mehr als suboptimal!

Wenn mal 'jemand mit höheren Weihen' über das Script sehen könnte, ob ggf. nicht mehr unterstützte Begriffe verwendet werden, die durch andere ersetzt werden müßten ... ich wäre sehr dankbar für jede Hilfe :D

Code: Select all

<?php
//----------------------------------------------------------------------------------------------
// {RANDOMCP:article_id}
// DESCRIPTION:     Shows a random content part from within a given article 
//                  (you supply the article ID - it shows a random content part from within that article).
// AUTHOR:          Jens Zetterström
// ADAPTED BY:      pSouper
// INSTALLATION:    Put the code in frontend_render (for example in a file called random_cp.php)
//                  Note: If the article content part contains replacement tags (for example {SITE}),
//                  they will not be replaced because code in frontend_render is executed after those
//                  replacement tags already have been processed. To fix, put the code in
//                  content.article.inc.php instead.
// USAGE:          {RANDOMCP:article_id}
//                  where article_id is the id of the ARTICLE.
// RCS:             Set article to invisible, but CPs to visible!
//----------------------------------------------------------------------------------------------
// ------------------------------------------------------------------
// obligate check for phpwcms constants
if (!defined('PHPWCMS_ROOT')) {
   die("You Cannot Access This Script Directly, Have a Nice Day."); }
// ------------------------------------------------------------------ 
// RCS inserted 03.11.08
 
function random_cp($aid, $db) {
    $CNT_TMP = '';
    $template_default = $GLOBALS["template_default"];
 
    $sql =  "SELECT * " .
            "FROM " . DB_PREPEND . "phpwcms_articlecontent " .
            "INNER JOIN " . DB_PREPEND . "phpwcms_article ON " . DB_PREPEND . "phpwcms_article.article_id = " . DB_PREPEND . "phpwcms_articlecontent.acontent_aid " .
            "WHERE acontent_aid   = " . $aid . " " .
            "AND acontent_visible = 1 " .
            "AND acontent_trash   = 0 " .
            "AND " . DB_PREPEND . "phpwcms_article.article_deleted=0 AND ".DB_PREPEND."phpwcms_article.article_begin < NOW() " .
        //  The line below is deleted as it introduces a bug that stops it showing random CP's - not sure why, help?
        //  "AND " . DB_PREPEND . "phpwcms_article.article_end > NOW() ";
            "ORDER BY RAND()";
 
    if($cresult = mysql_query($sql, $db) or die("error retrieving article from database")) {
      if($crow = mysql_fetch_array($cresult)) {
         // echo "<pre>";print_r($crow);echo"</pre>";
         // Space before
         if($crow["acontent_before"]) {
            $CNT_TMP .= '<div style="margin:' . $crow["acontent_before"] . 'px 0 0 0; padding:0 0 0 0; clear:both;"></div>';
         }
 
         // include content part code section
         include("include/inc_front/content/cnt" . $crow["acontent_type"] . ".article.inc.php");
 
         // check if top link should be shown
         if($crow["acontent_top"]) {
            if($template_default["article"]["top_sign_before"].$template_default["article"]["top_sign_after"]) {
               $CNT_TMP .= $template_default["article"]["top_sign_before"];
               $CNT_TMP .= '<a href="#top">'.$template_default["article"]["top_sign"].'</a>';
               $CNT_TMP .= $template_default["article"]["top_sign_after"];
            }
            else {
               $CNT_TMP .= '<br /><a href="#top">' . $template_default["article"]["top_sign"] . '</a>';
            }
         }
 
         // Space after
         if($crow["acontent_after"]) {
            $CNT_TMP .= '<div style="margin:0 0 ' . $crow["acontent_before"] . 'px 0; padding:0 0 0 0; clear:both;"></div>';
         }
      }
    }
   return $CNT_TMP;
}
 
if( ! ( strpos($content["all"],'{RANDOMCP:')===false ) ) {
   $content["all"] = preg_replace('/\{RANDOMCP:(.*?)\}/ie', 'random_cp("$1", $db);', $content["all"]);
// $content["all"] = (psTagParser ($content["all"]));    // RCS commented 03.11.08
}
 
?>

User avatar
juergen
Moderator
Posts: 4553
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by juergen » Sat 22. Dec 2018, 08:28

Alter Mann :)

ich hab zwar keine Ahnung, aber die sql Schnittstelle läuft so nicht mehr unter PHP7 .... google mal nach PDO

Code: Select all

if($cresult = mysql_query($sql, $db) or die("error retrieving article from database")) {
Schöne Weihnachten ;)

Auch alter Mann

Old Boy
Posts: 1104
Joined: Fri 23. Nov 2012, 13:52

Re: Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by Old Boy » Sun 23. Dec 2018, 15:08

Seit 3 Tagen versuche ich nun verzweifelt an einer Lösung...

Wenn es nun mit dem Zugriff auf die DB so nicht mer klappt habe ich mir gedacht, versuche ich es mit einem RT
{SHOW_CONTENT:CP,Zufallswert aus einer Gruppe von vorgegebenen CPIDs}

Die Zufallszahlen werden auch sauber generiert und in die Klammern eingefügt, aber es wird dann nur der generierte Text ausgegeben und nicht der gewünschte ContentPart.
Dabei habe ich es mit PHP Code im Haupttemplate, in eigener Datei und innerhalb einer CP-Vorlage versucht!

Die Ausgabe im Backend sieht allerdings in allen Fällen so aus:
{SHOW_CONTENT:CP,542}

Was mache ich falsch, was habe ich nicht beachtet?
Die entsprechenden Einstellungen in der conf.inc.php habe ich natürlich wie immer gesetzt!

Ich nehme an, das hängt mit der Reihenfolge der Bearbeitung unter der Haube von phpwcms ab ...

User avatar
juergen
Moderator
Posts: 4553
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by juergen » Mon 24. Dec 2018, 08:10

:lol:

Zweifelst du an meiner Anregung ?

User avatar
juergen
Moderator
Posts: 4553
Joined: Mon 10. Jan 2005, 18:10
Location: Weinheim
Contact:

Re: Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by juergen » Mon 24. Dec 2018, 09:33

Die Zeile die ich oben markiert hatte, ersetzen durch ( Ich hoffe eine aktuelle dbcon.inc.php getroffen zu haben :
if($crow=_dbQuery($sql,'ARRAY')){

ersetzt den Teil

if($cresult = mysql_query($sql, $db) or die("error retrieving article from database")) {
if($crow = mysql_fetch_array($cresult)) {


das ganze muss dann in einer Klammerebene "{" ablaufen

ungetestet aber könnte funktionieren. Wichtig ist, dass die Klammerebene des fetch array Befehls komplett verschwindet.

Im Januar muss ich das bei einer meiner Seiten machen und da bin ich dann besser "drinnen"

Schöne Weihnachten

Old Boy
Posts: 1104
Joined: Fri 23. Nov 2012, 13:52

Re: Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by Old Boy » Mon 24. Dec 2018, 11:12

Nein, ich hatte nicht gezweifelt, aber dein Hinweis war für mich als absoluten Nichtkenner von PHP weniger eine Lösung als ein neues Suchspiel, da habe ich erst mal meinen spontanen Gedanken mit Bordmitteln verfolgt :D

Danke @juergen, das werde ich gleich morgen mal probieren ...
heute ist erst mal Heiligabend angesagt und da ist noch eine Meeenge zu tun und der Computer ist heute absolut verboten!

Also dann, ihr Häuflein Aufrechter, lasst euch reichlich beschenken, kommt gut ins neue Jahr ... und bleibt gesund :D

Old Boy
Posts: 1104
Joined: Fri 23. Nov 2012, 13:52

Re: Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by Old Boy » Mon 24. Dec 2018, 12:22

OK, ich hab's dann doch mal schnell versucht ...

Auch hier wieder das Ergebnis: Nur die Ausgabe {RANDOMCP:xxx} erscheint im Klartext im Frontend :(

Ach ja, ich hatte folgende Änderung zusätzlich versucht, da preg_replace wohl out ist:

Code: Select all

    //$content["all"] = preg_replace('/\{RANDOMCP:(.*?)\}/ie', 'random_cp("$1", $db);', $content["all"]);
      $content["all"] = preg_replace_callback('/\{RANDOMCP:(.*?)\}/ie', 'random_cp("$1", $db);', $content["all"]);
Also gut ... erst mal ein paar Tage Weihnachten feiern :D

User avatar
Uwe367
Posts: 980
Joined: Sat 15. Sep 2007, 07:19
Location: Koblenz

Re: Unter PHP7.2 will { RANDOMCP:xxx } nicht mehr!?

Post by Uwe367 » Tue 25. Dec 2018, 13:59

Der Support für den Modifier e wird seit PHP 7 nicht mehr unterstützt und es muß preg_replace_callback verwendet werden.
Kann man auch hier nachlesen: http://php.net/manual/de/function.preg-replace.php
Beim Punkt Changelog findest du einen weiterführenden Link zu preg_replace_callback
Hatte das gleiche Problem hier:
viewtopic.php?f=9&p=149264&sid=5cc5abdb ... 2a#p149264
Vielleicht kannst du dir aus Olivers Beispiel etwas ableiten.
Wenns mir wieder besser geht schaue ich mal ob ich die ganzen NAV_LIST_UL Scripte aus dem Wiki wieder ans laufen bekomme.

Schöne Feiertage und nen guten Rutsch euch.

Post Reply