MyBB.de Forum

Normale Version: Merge System zeigt Fehler auf Requirements Check
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe eine neues myBB Forum mit dem aktuelle Code erstellt und anschließend das Merge System mit letztem Code hochgeladen.

Wenn ich das nun laufen lasse erhalte ich bereits auf dem "Requirements Check" folgende Fehlermeldung:
[attachment=14188]

Code:
Fatal error: Uncaught Error: Call to undefined function merge_fetch_remote_file() in /home/forge/newforum.stargate-project.de/merge/index.php:599 Stack trace: #0 {main} thrown in /home/forge/newforum.stargate-project.de/merge/index.php on line 599

Aktuell habe ich die Seite mit PHP 7.4 laufen, da 7.1, 8.0, 8.1 und 8.2 nur noch mehr Fehlermeldungen auf dem Merge System anzeigen.

Hat jemand eine Idee, wie ich mit dem Import weiterkomme?

Danke & LG
vorlon.tech
Die Funktion "merge_fetch_remote_file" gibt es auf jeden Fall, daher kann ich mir den Fehler nicht so ganz erklären: https://github.com/mybb/merge-system/blo...s.php#L649

Bist du sicher, dass du alle Dateien es Merge-System vollständig hochgeladen hast?
@stefanT danke for den schnellen Hinweis.
Aus irgendeinem Grund war die Datei mit den Funktionen "leer". Ich habs nochmal hochgeladen und dann zeigte das System unter PHP 7.4 keine Fehler mehr an.

Allerdings habe ich beim Import der User jetzt direkt wieder ein Problem:

Code:
MyBB has experienced an internal SQL error and cannot continue.
SQL Error:
1062 - Duplicate entry '' for key 'sgp_mybb_users.username'
Query:
INSERT INTO sgp_mybb_users (`usergroup`,`additionalgroups`,`displaygroup`,`import_usergroup`,`import_additionalgroups`,`import_displaygroup`,`import_uid`,`username`,`password`,`salt`,`loginkey`,`email`,`regdate`,`lastactive`,`lastvisit`,`website`,`showsigs`,`signature`,`showavatars`,`timezone`,`avatardimensions`,`avatartype`,`avatar`,`lastpost`,`icq`,`skype`,`google`,`hideemail`,`allownotices`,`regip`,`lastip`,`language`,`passwordconvert`,`passwordconverttype`,`postnum`,`invisible`,`birthday`,`birthdayprivacy`,`subscriptionmethod`,`receivepms`,`receivefrombuddy`,`pmnotice`,`pmnotify`,`showquickreply`,`ppp`,`tpp`,`daysprune`,`timeformat`,`dst`,`buddylist`,`ignorelist`,`style`,`away`,`awaydate`,`returndate`,`referrer`,`referrals`,`reputation`,`timeonline`,`showcodebuttons`,`totalpms`,`unreadpms`,`pmfolders`,`notepad`,`threadmode`,`showredirect`,`dateformat`,`dstcorrection`,`warningpoints`,`moderateposts`,`moderationtime`,`suspendposting`,`suspensiontime`,`suspendsignature`,`suspendsigtime`,`coppauser`,`classicpostbit`,`loginattempts`,`usernotes`,`showimages`,`showvideos`,`passwordconvertsalt`) VALUES (0,'',0,0,'',0,0,'','','','','cacuzo90@web.de',0,0,0,'',1,'',1,'','','','',0,'','','',1,1,X'3ee0d65f',X'','','0d4e40138e6f70201c9e86af2224d30c','vb4',0,0,'','all',2,1,0,1,1,1,0,0,0,'',0,'','',0,0,0,'',0,0,0,0,1,0,0,'0**$%%$1**$%%$2**$%%$3**$%%$4**','','',1,'',1,0,0,0,0,0,0,0,0,0,0,'',1,1,'9,s-*66%#\'bKQrJhDFWX=|~|r0SG&J')

Irgendwie wird der Username nicht übernommen.

Hat jemand dazu eine Idee?
Danke!
Anscheinend gibt es mindestenes ein Mitglied, das keinen "Username" hat - d.h. der Username ist leer.
Und spätestens beim Import des zweiten Mitglieds ohne Username wirft die Datenbank diesen Fehler heraus, da das Tabellenfeld 'username' nicht leer sein darf.

An dieser Stelle würde ich die Tabelle des alten Forums mit der MyBB-Tabelle sgp_mybb_users vergleichen.
(Es werden wahrscheinlich schon viele Mitglider bis zu diesem Fehler importiert worde sein.)
Gibt es bis hierhin schon ein Mitglied ohne 'username'?

(1) Wir wissen nicht, was dein Urspunrgsforum ist und wie dein Datenbankschema aussieht.
Finde heraus, ob es identische oder fehlende 'Username' gibt.
SQL:
SELECT COUNT(*) FROM [Usprungsforum.users];
SELECT UNIQUE [username] FROM [Usprungsforum.[users]];
Wenn die Anzahl der Datensätze unterschiedlich ist, gibt es Handlungsbedarf - manuell.

Finde heraus, ob es Mitglieder ohne Benutzernamen gibt.
SQL:
SELECT [username] FROM [Urpsungsforum.[users]] WHERE [username] = '';

Die Tabellennamen und Felder des Ursprungsforums musst du entsprechend ersetzen, weil (1).

[ETS]
Der erste Datensatz des alten Forums wird mit einem leeren Username übernommen.
Beim zweiten Datensatz des alten Forums ist der Username wieder leer und dann kommt dieser Fehler.

Im SQL Statement sieht man ja das der Username leer ist. Das passiert von Anfang an.

Das Problem scheint in dieser Funktion zu liegen:
Code:
$insert_data['username'] = encode_to_utf8($data['username'], "user", "users");
leider wissen wir immer noch nicht, von welcher Forensoftware aus du versuchst den Merge zu machen
Könnte bei der Recherche durchaus nützlich sein

eventuell wurde das Problem sogar schon gelöst.
Schau mal ob die Github-Version von Sama/Omar funktioniert: https://github.com/Sama34/merge-system

Das Problem mit dem leeren Usernamen und der Fehlermeldung hatten wir schon einmal, allerdings hatte die Userin es sehr unkonventionell gelöst und ob es der gleiche Merge-Prozess war, wissen wir ja auch nicht
Oh sorry: ich versuche von einem VBulletinV4 Forum aus zu importieren
hast du mal die fork-version von Omar (Sama) probiert?
Ja, habe ich heute ausprobiert. Hier passiert genau dasselbe.

Ich habe jetzt mal den Usernamen nach dem rausholen aus der VBulletinV4 Datenbank und nach der Umwandlung im Script gedumpt und hier scheint das problem zu liegen:

Aus VBulletin Datenbank:
Code:
string(7) "Ancient" bool(false)

Nach Umwandlung mit "encode_to_utf8($data['username'], "user", "users");"
Code:
string(19) "_vbulletin4_import2" bool(false)

In der "encode_to_utf8" Funktion habe ich mal die beiden encodings gedumpt:
Code:
var_dump($import_session['table_charset_old'][$old_table_name]);
string(6) "latin1"

var_dump($import_session['table_charset_new'][$new_table_name]);
string(7) "utf8mb3"

Vielleicht hilft das jemandem auf die Sprünge. Danke!
Das Problem scheint offensichtlich an der UTF8-Konvertierung zu liegen.
Was passiert, wenn du die Datei .\merge\boards\vbulletin4\users.php folgendermaßen bearbeitest?

Von:
$insert_data['username'] = encode_to_utf8($data['username'], "user", "users");
Zu:
$insert_data['username'] = $data['username'];

Eliminiere diese Konvertierung und lasse MyBB einfach den Original-Mitgliedsnamen importieren.
UTF8 hat einen größeren Zeichensatz und kann die Latin1-Kollation (ISO-8859-1, 256 Zeichen) komplett abdecken; da braucht nichts konvertiert zu werden. Wenn die MyBB-Ziel-Tabelle bereits in UTF8 vorliegt, wird auch jeder Plaintext-String (Username) aus der alten Tabelle in der entsprechenden Kollation in UTF8 in die Tabelle geschrieben.

Falls du auf eine Konvertierung bestehen solltest...
"encode_to_utf8()" ist eine eigene MyBB-Funktion.
Wenn du eine 'unabhängige' Konvertierung vornehmen möchtest, kannst du diese Funktion ebenso durch die native PHP-Funktion "utf8_encode()" ersetzen. Die verwandelt ISO-8859-1 (Latin1) in UTF8, womöglich ohne Probleme.

[ETS]