count() in search_modext.php

hgs

#12
Gerade durchgetestet
in der aktuellen Version 2.12.1 gibt es diese Meldung im ErrorlOg
Thu, 20 Dec 2018 19:53:37 +0000 [E_WARNING] /search/search_modext.php:[104] from /modules/wysiwyg/search.php:[55] print_excerpt2 "count(): Parameter must be an array or an object that implements Countable"
Thu, 20 Dec 2018 19:53:38 +0000 [E_DEPRECATED] /modules/imagegallery/search.php:[73] from /framework/frontend.functions.php:[240] require "Function create_function() is deprecated"
Thu, 20 Dec 2018 19:53:38 +0000 [E_DEPRECATED] /modules/imagegallery/search.php:[74] from /framework/frontend.functions.php:[240] require "Function create_function() is deprecated""

Auf dem 1:1 Clone der Seite mit 2.12.2 bleibt der ErrorLog leer
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

hgs

Werde es morgen früh mal nachbauen und berichten
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

Gast

Für Harald zum Nachstellen und testen:

wie oben angenommen, reicht ein einfacher Text mit einer korrekten EMail-Adresse und einem Suchwort, das eher selten auf den Seiten zu finden ist. Damit es funktioniert, wären zwei Sectionen nicht verkehrt. Einmal mit, einmal ohne Mailadresse
als Beispiel zwei Wysiwyg's
1. Section - Text:  Automobil mail@mail.com
2. Section - Text:  Automobil

Suchbegriff: Automobil

die erste Section wird wg der Mailadresse raus gefiltert, die zweite bringt den Treffer

mit Originalcode in der Datei search/search_modext.php - Zeile 82 
$excerpt_array =false;
bekommst du die Fehlermeldung

Mit Dietmar's Fix
$excerpt_array = [];
nicht mehr

Luisehahne

Das Problem ist eben halt, dass php7 immer stricter wird. Da fallen irgendwann mal alle Module durchs Raster. Demnächst sind alle Variablen vor Benutzung type mäßig zu deklarien. Ist vorbei, einer Variable verschieden Typen zu zuweisen, wie das bisher möglich war. Da kommt doch richtig Freude auf.  :|

Ganz zu schweigen von MySql, CSP und mehr. Habe einen großenTeil für die kommende 2.13.x bereits umgesetzt, und musste danach erstmal unsere eigene Plugins im CKeditor wieder lauffähig bekommen.

Da passierne Ding, da bekommst du Alpträume  :-P

Dietmar
Note: Once the code has been generated, it is easy to debug. It's not a bug, it's a feature!

Gast

bin noch dabei, die Bedingungen zu analysieren, unter denen der o.g. Fehler auftritt.
Die Lösung ist für dich und mich wohl verständlich, aber ich hätte den Fehler gern vorher einmal provoziert

Wie gesagt, kommt die Meldung aus der Benutzung der Suche auch im Gästebuch. Die Suche dort generiert aus den Beiträgen u.a. den Content und alle Daten, die im Gästebuch genutzt werden, eben auch Name, EMail

Daraus erhalte ich minimum einen Treffer, sonst wäre $result == false (in der search.php des Moduls) und die search_modext.php springt garnicht erst an.
Diese search_modext.php soll nun in der get_excerpts() die Treffer suchen, den Suchbegriff markieren, doppelte aussortieren usw. aber auch Treffer mit einer Mailadresse drin wieder ausfiltern (Zeile 102ff)

if(!preg_match('/\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\./', $match)) // skip excerpts with email-addresses
            $excerpt_array[] = trim($match);


Das bedeutet (für mich): wenn mein Treffer ($match) eine EMail-Adresse enthält, fliegt der raus und damit wäre $except_array immer noch false (aus Zeile 82) und in Zeile 104 beim count() kein Array, weil  ja nicht als solcher deklariert, was deine Korrektur dann ändern würde.

So rein theoretisch braucht es auch kein Gästebuch dazu, ein Wysiwyg mit Mailadresse im Treffersatz sollte reichen, um den Fehler ohne Korrektur zu provozieren, oder?


Luisehahne

Quote from: jacobi22 on December 19, 2018, 11:41:08 AM
Quote[E_WARNING] /search/search_modext.php:[104] from /modules/guestbook/search.php:[68] print_excerpt2 "count(): Parameter must be an array or an object that implements Countable"

Stackoverflow meint: vorher abfragen, ob $excerpt_array auch ein Array ist (is_array()), wenn nicht, auf 1 setzen - 1 muß es ja sein, weil er sonst nicht in die while-Schleife geht

bitte mal checken und wenn bestätigt, ins Projekt aufnehmen

Ursache liegt an einer falschen Deklaration. Werde es für die 2.12.2 fixen. Meldung wird sein
Quotebug fixed wrong array declaration in function get_excerpts line 82 in file  /search/search_modext.php

das FALSE ändern in [], das sollte es gewesen sein. Bitte mal vorab testen und Bescheid geben, dann übernehme ich es ins Project

Dietmar
Note: Once the code has been generated, it is easy to debug. It's not a bug, it's a feature!

Gast

macht ja nix  ;-)
Dietmar weiß sicher Bescheid, wenn er "count()" liest  - nur wissen muß er es

paulchen

Der Fehler trat auf meiner Webseite auf. Konfiguration: WB 2.12.1 -r188 , PHP 7.2.13

Ein eben durchgeführter Suchtest mit nur einer Trefferstelle gab bei mir ebenfalls keine Fehlermeldung aus.
Leider kann ich nicht nachvollziehen, wie / wodurch die zitierte Fehlermeldung entstanden ist, weil die auslösende Suche nicht von mir kam.

Gast

muß ich selber erst probieren, bekam das auch nur gemeldet
das count()-Problem als solches ist aber bekannt ab PHP 7.2.x

hgs

Hab mal eine Suche auf einer Seite mit nur einem Treffer erzeugt, der ErrorLog bleibt leer.
Oder wie kann ich den Fehler "erzeugen"?
PHP-Version: 7.2.11
WebsiteBaker-Version: 2.12.1 -r188
LG Harald

"Fange nie an, aufzuhören - höre nie auf, anzufangen." Marcus Tullius Cicero (106-43 v.Chr.)

Gast

noch ergänzend dazu: sollte nach meinem Verständnis auftreten, wenn nur ein Treffer in der Suche generiert wird. In diesem Fall kommt der Treffer aus dem Gästebuch, das im speziellen Fall als Frage-Antwort-Modul dient. Das Problem sollte aber m.E. in jeder Suche mit nur einem Treffer ab PHP > 7.2 auftreten, unabhängig vom Modul-Typ, da count() nur Array's verarbeitet, ein Einzeltreffer aber kein Array ist.

Bitte auch mich korrigieren, wenn ich da falsch liege - Danke

Gast

Quote[E_WARNING] /search/search_modext.php:[104] from /modules/guestbook/search.php:[68] print_excerpt2 "count(): Parameter must be an array or an object that implements Countable"

Stackoverflow meint: vorher abfragen, ob $excerpt_array auch ein Array ist (is_array()), wenn nicht, auf 1 setzen - 1 muß es ja sein, weil er sonst nicht in die while-Schleife geht

bitte mal checken und wenn bestätigt, ins Projekt aufnehmen