Relaunch Website mit HTML5 PHP7
-
- Handbuchversteher
- Beiträge: 7381
- Registriert: 01.01.1970 02:00
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 938 Mal
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
muss so aussehen
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())
Die Zeile
Code: Alles auswählen
$this->Record = mysqli_fetch_array($this->Query_ID, MYSQL_ASSOC);
Code: Alles auswählen
$this->Record = mysqli_fetch_array($this->Query_ID, MYSQLI_ASSOC);
Anbei auch die Suchfunktion für mod_search für PHP7 zum Austausch.
(ereg() ersetzt durch stripos())
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- ConPresso-Checker
- Beiträge: 108
- Registriert: 01.01.1970 02:00
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 5 Mal
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?
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);
-
- Handbuchversteher
- Beiträge: 7381
- Registriert: 01.01.1970 02:00
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 938 Mal
_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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- Handbuchversteher
- Beiträge: 7381
- Registriert: 01.01.1970 02:00
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 938 Mal
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
geändert werden zu
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;
}
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- ConPresso-Profi
- Beiträge: 1004
- Registriert: 01.01.1970 02:00
- Wohnort: Wuppertal
- Hat sich bedankt: 274 Mal
- Danksagung erhalten: 59 Mal
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:
UPDATE:
Offenbar kann man die &-Zeichen einfach entfernen
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']);
}
Offenbar kann man die &-Zeichen einfach entfernen
Günther Ludwig
-
- Handbuchversteher
- Beiträge: 7381
- Registriert: 01.01.1970 02:00
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 938 Mal
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
ersetzt durch
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 = '';
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- Handbuchversteher
- Beiträge: 7381
- Registriert: 01.01.1970 02:00
- Hat sich bedankt: 114 Mal
- Danksagung erhalten: 938 Mal
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
zu
Damit wird die Verbindung nicht für jedes DB-Objekt neu aufgebaut sondern die bestehende benutzt.
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);
}
}
}
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;
}
}
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
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle