kleine Suchmaschine läuft nicht unter PHP8

PHP, CSS und JavaScript lernen. Anwendungen für Webseiten
ph0nq
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 5
Registriert: Di 29. Okt 2024, 08:00

kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von ph0nq »

Guten Morgen in die Runde,

nach längerer Suche bin ich hier gelandet und hege die Hoffnung, ein paar Tipps oder Hinweise zu finden, da Werner Zenks "kleine Suchmaschine" hier rege diskutiert wurde und noch immer wird.

Ich benutze das Skript nun schon eine Weile unter PHP7.4 würde aber gerne auf PHP8.x umstellen. Leider musste ich feststellen, dass die "kleine Suchmaschine" (Version 4.12.2021) mit keiner 8er Version läuft. Es kommen keine Fehlermeldungen, es wird lediglich bei keiner Suche etwas angezeigt. Die identische Suche unter PHP7 liefert Ergebnisse.

Und, um meine Verwunderung zu komplettieren, läuft Werners "kleine rekursive Suchmaschine" (Version 4.11.2020) auch unter PHP8 einwandfrei.

Hat noch jemand so eine Beobachtung gemacht oder eine Idee, an was das liegen könnte?

Danke und Grüße
Christian
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 6399
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von Tommy Herrmann »

Moin Christian,

und willkommen bei uns im Forum :hallo:

Ich verwende noch eine uralte Version vom Werner (18.02.2017) und die läuft einwandfrei auch unter PHP 8.

https://www.mobirise-tutorials.com/Suchen.php

Im Moment verwende ich PHP 8.2.24 wie Du hier sehen kannst:

https://www.mobirise-tutorials.com/PHP/

Leider hat Werner ja seine Website im April 2024 eingestellt und ist auch nicht erreichbar. Er war seither auch nicht mehr hier im Forum :crying:

Hier habe ich eine neuere Version zum Download:

https://www.mobirise-tutorials.com/Download-Archiv/


Ich muss heute Vormittag zu allen möglichen Terminen und kann erst später wieder helfen ...
ph0nq
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 5
Registriert: Di 29. Okt 2024, 08:00

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von ph0nq »

Wow, vielen Dank für die superschnelle Hilfe Tommy!
Ich schau mir die Links heut im Laufe des Tages mal an und werde berichten...
ph0nq
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 5
Registriert: Di 29. Okt 2024, 08:00

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von ph0nq »

Dank der älteren Versionen zum Vergleich und weiterer Recherche, habe ich tatsächlich die Lösung gefunden! Sie ist, wie vermutet, banal...

Ich habe bei mir die Dateiendungen reduziert auf

Code: Alles auswählen

$dateiendungen = [
 ".htm",
 ".html",
 ".php",
];
und da hier keine nicht-Text-Dateien mehr dabei sind, auch

Code: Alles auswählen

$_dateiendungen = "";
Das Gleiche habe ich auch mit der Variable $nicht_durchsuchen gemacht.
Interessanterweise hat PHP7 damit kein Problem, PHP8 aber. Ich musste die "leeren" Variablen statt auf

Code: Alles auswählen

["",]
setzen, damit es auch unter PHP8 wieder funktioniert.

Warum das so ist, weiß ich nicht. Liegt's am geänderten Typecasting?

Jedenfalls bin ich froh, dieses Forum und die Lösung zu meinem Problem gefunden zu haben.

VG Christian
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 6399
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von Tommy Herrmann »

Ja - das ist doch prima.

Leider verstehe ich davon auch nicht genug, um das beantworten zu können.

Das ist aber in jedem Fall so falsch:

$_dateiendungen = "";

Die eckigen Klammern [ müssen stehen bleiben ]

So sieht das bei mir aus:

Code: Alles auswählen

                /* Die Dateiendungen der Dateien die gefunden werden sollen.
                 Dateiendungen mit Großbuchstaben (z. B.: .JPG) müssen extra 
                 eingetragen werden! ".js", entfernt */
                $dateiendungen = [
                 ".gif",
                 ".htm",
                 ".html",
                 ".jpg",
                 ".mp3",
                 ".pdf",
                 ".php",
                 ".png",
                 ".zip",
                 ".css",                 
                ];

                /* Die Dateiendungen der Dateien die von der oberen Liste "keine"
                 Textdateien sind (es wird nur der Dateiname angezeigt) */
                $_dateiendungen = [
                 ".gif",
                 ".txt",
                 ".jpg",
                 ".mp3",
                 ".pdf",
                 ".png",
                 ".zip",
                ];
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 6399
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von Tommy Herrmann »

Ich habe mal die KI "ChatGPT" zu diesem Array befragt.

ChatGPT hat geschrieben:
Die eckigen Klammern [] in PHP stehen in diesem Fall für ein Array, das verschiedene Dateiendungen speichert.
In deinem Beispiel ist $dateiendungen ein Array, das eine Liste von Dateiendungen als String-Elemente enthält.

Die Deklaration mit eckigen Klammern [] ist eine kürzere und moderne Schreibweise für Arrays in PHP (ab Version 5.4). Vorher musste man Arrays mit der Funktion array() erstellen.

So sieht das Ganze als Array-Deklaration aus:

Code: Alles auswählen

$dateiendungen = [ // Array wird mit eckigen Klammern definiert
    ".gif",
    ".htm",
    ".html",
    ".jpg",
    ".mp3",
    ".pdf",
    ".php",
    ".png",
    ".zip",
    ".css",                 
];

https://www.php.net/manual/en/language.types.array.php
ph0nq
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 5
Registriert: Di 29. Okt 2024, 08:00

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von ph0nq »

Du kannst meine Verwunderung nachvollziehen, warum es unter PHP7 ohne Fehlermeldung funktioniert...? :)
Benutzeravatar
Tommy Herrmann
Site Admin
Site Admin
Beiträge: 6399
Registriert: So 6. Dez 2020, 07:37
Wohnort: Berlin
Kontaktdaten:

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von Tommy Herrmann »

Hier wird das Array überprüft:

Code: Alles auswählen

$text = (!in_array($dateiendung, $_dateiendungen)) ? file_get_contents($datei) : mb_substr(strtoupper($dateiendung), 1) . '-Datei';

Das hat sich anscheinend ab PHP 8 geändert:

https://www.php.net/manual/en/function.in-array.php

PHP hat geschrieben: Note:

Prior to PHP 8.0.0, a string needle will match an array value of 0 in non-strict mode, and vice versa. That may lead to undesireable results. Similar edge cases exist for other types, as well. If not absolutely certain of the types of values involved, always use the strict flag to avoid unexpected behavior.

>>> Deutsch

Hinweis:

Vor PHP 8.0.0 passt ein needle-Wert vom Typ string im nicht-strikten Modus auf einen Array-Wert von 0 und umgekehrt. Das kann zu unerwünschten Ergebnissen führen. Ähnliche Grenzfälle gibt es auch für andere Typen. Wenn nicht absolut sicher ist, um welche Art von Werten es sich handelt, sollte immer das Flag strict verwendet werden, um ein unerwartetes Verhalten zu vermeiden.

ph0nq
Mitglied (Level 1)
Mitglied (Level 1)
Beiträge: 5
Registriert: Di 29. Okt 2024, 08:00

Re: kleine Suchmaschine läuft nicht unter PHP8

Ungelesener Beitrag von ph0nq »

Jaaaa.... Nach so einer Erklärung habe ich gesucht, aber nichts gefunden.
Danke!
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast