Relaunch Website mit HTML5 PHP7

Fragen und Diskussionen zu laufenden ConPresso 4.x Projekten werden in diesem Forum diskutiert.
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Super! Danke!

Funktioniert ebenfalls!

:wink:
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Da ich meine eigene mySQLi-Anpassung benutze, ist mir bisher nicht aufgefallen, dass balu bei der Funktion next_record_assoc() ein I (großes i) vergessen hat.

Die Zeile

Code: Alles auswählen

$this->Record = mysqli_fetch_array($this->Query_ID, MYSQL_ASSOC);
muss so aussehen

Code: Alles auswählen

$this->Record = mysqli_fetch_array($this->Query_ID, MYSQLI_ASSOC);
Ohne das I liefert mod_search (also die Suche) keine Ergebnisse.

Anbei auch die Suchfunktion für mod_search für PHP7 zum Austausch.
(ereg() ersetzt durch stripos())
Dateianhänge
inc_search_function.inc.rar
(4.39 KiB) 265-mal heruntergeladen
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Gandalf
ConPresso-Checker
Beiträge: 108
Registriert: 01.01.1970 01:00
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Beitrag von Gandalf »

Hallo Markus und balu,

dank Eurer Hilfe und den geänderten daten habe ich heute erfolgreich auf PHP 7.1 umgestellt.

Einzig die Suchfunktion mod_search bringt leere Ergebnisse.

Frage an Markus, wo in welcher Datei muss ich diesen Code hier ändern?

Code: Alles auswählen

$this->Record = mysqli_fetch_array($this->Query_ID, MYSQL_ASSOC);
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

_include/db_mysql.inc.php
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Gandalf
ConPresso-Checker
Beiträge: 108
Registriert: 01.01.1970 01:00
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Beitrag von Gandalf »

Vielen Dank Markus, das war's.

conpresso läuft bei mir auch mit PHP 7.2 nun problemlos.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Kleines Update:

Es gibt Module, wie mod_inline, die die Methode ->table_exists benutzen.
Da mysqli_list_tables aber nicht existiert, also mysql_list_tables ersatzlos gestrichen wurde, hat Balu dazu ja schon eine Anmerkung geschrieben, es aber nicht umgesetzt. Das habe ich jetzt nachgeholt.

Es muss also

Code: Alles auswählen

    	function table_exists($table)
	    {
            $this->connect();
		    $tables=mysqli_list_tables($this->Database); // FIXME SHOW TABLES FROM db
    		while (list($temp)=mysqli_fetch_array($tables)) {
	    		// echo "BALU: $temp<br />";
		    	if($temp == $table) return 1;
    		}
	    	return 0;
    	}
geändert werden zu

Code: Alles auswählen

    function table_exists($table)
    {
        $this->connect();
        $tables=mysqli_query($this->Link_ID, "SHOW TABLES"); 
        while (list($temp)=mysqli_fetch_array($tables)) {
            if($temp == $table) return 1;
        }
        return 0;
    }
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

[EDIT: hat sich erledigt]
Zuletzt geändert von Mr. Magpie am 08.02.2019 07:52, insgesamt 1-mal geändert.
Günther Ludwig
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Sowohl unter PHP 7.1 als auch mit PHP 7.2 erhalte ich noch einen Fehler in der _include/translation.inc.php (CPO 4.0.12):

Parse error: syntax error, unexpected 'new' (T_NEW) in /homepages/12/d123456789/htdocs/Test/_include/translation.inc.php on line 143

Das ist im folgenden Code:

Code: Alles auswählen

if (!empty($_SESSION['SID_user']['language']) && $_SESSION['SID_user']['language']!=$cpoSystem['language']) {
    $translator = &new translate($_SESSION['SID_user']['language']);
} else {
    $translator = &new translate($cpoSystem['language']);
}
UPDATE:

Offenbar kann man die &-Zeichen einfach entfernen
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Bei Auftritten, die unter PHP 7.2 und 7.3 laufen, ist mir zuerst durch einige Module, nun aber auch durch CPO alleine aufgefallen, dass bei der Ausgabe von Meldungen immer wieder eine Fehlermeldung auftritt.
Und zwar immer dann, wenn mehrere Meldungen nicht zusammen sondern nacheinander ausgegeben werden, d.h. _include/message.php mehrfach aufgerufen wird (passiert zum Beispiel, wenn man das letzte Bild aus der Dateiliste löscht).

Ursache ist, dass das bisherige automatische Casten von Variablen nicht mehr von PHP unterstützt wird, d.h. man nicht einfach eine Variable als String definieren und dann als Array benutzen kann.
Aber genau das tut das Meldungssystem von CPO schon immer.

Um dies zumindest nicht unnötig zu provozieren, habe ich nun am Ende von message.php die Zeile

Code: Alles auswählen

$message = '';
ersetzt durch

Code: Alles auswählen

$message = array();
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Nach der Umstellung zweier produktiver Auftritte auf mySQLi tauchten trotz vorheriger Tests Probleme mit den Datenbankverbindungen auf, die sich durch vereinzelte "Database connect fail"-Einträge im Log äußerten.
Witzigerweise steht das Log ja IN der Datenbank, also ein merkwürdiger Fehler.

Auffällig war, dass beides Shared-Hosting-Accounts bei 1&1/IONOS sind.
Etwas Recherche brachte zutage, dass dort die gleichzeitigen Datenbankverbindungen auf 18 begrenzt sind, bei jeder PHP-Version. Zu Fehlern führte dies nur unter mySQLi, nicht unter mySQL.

Tatsächlich handelt es sich um viel mehr Verbindungsabbrüche, die ich zur Probe in eine Datei statt in die Datenbank habe schreiben lassen.

Ich habe mich nun länger damit beschäftigt und nun nach mehreren Fehlversuchen eine einfache und logische Lösung gefunden, mit der das Problem schlagartig beseitigt wurde.

In _include/db_mysql.inc.php ändert sich die Funktion connect() von

Code: Alles auswählen

        function connect() 
        {
            if (0 == $this->Link_ID) {
                $this->Link_ID = @mysqli_connect($this->Host, $this->User, $this->Password);
                
                if (!$this->Link_ID) {
                    $this->halt('Database connect failed');
                }

                if (!mysqli_select_db($this->Link_ID, $this->Database)) {
                    $this->halt('cannot use database ' . $this->Database);
                }
            }
        }
zu

Code: Alles auswählen

        function connect() 
        {
            if (isset($GLOBALS['DB_LINK_ID'])) $this->Link_ID = $GLOBALS['DB_LINK_ID'];
            if (0 == $this->Link_ID) {
                $this->Link_ID = @mysqli_connect($this->Host, $this->User, $this->Password);
                
                if (!$this->Link_ID) {
                    $this->halt('Database connect failed');
                }

                if (!mysqli_select_db($this->Link_ID, $this->Database)) {
                    $this->halt('cannot use database ' . $this->Database);
                }
                $GLOBALS['DB_LINK_ID'] = $this->Link_ID;
            }
        }
Damit wird die Verbindung nicht für jedes DB-Objekt neu aufgebaut sondern die bestehende benutzt.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten