SQL Fehler bei Upload von großen Dateien

  • Affected Version
    WoltLab Suite 5.5
    Affected App
    WoltLab Suite Filebase

    Moin an alle,


    ich habe da ein kleines Problem. Bei dem Upload von größeren Dateien, im aktuellen Fall eine 3,39 GB große Datei, erhalte ich nach dem Upload einen SQL Fehler. Sozusagen, wenn der Eintrag in die DB geschrieben wird. Der Upload an sich funktioniert scheinbar ohne Probleme.


    Requested URL
    POST /filebase/index.php?ajax-upload/&t=79fe1e604151e6f90ecd2b8fb9e599c700084e4e363683976338a288384390f0-5D0nHHRJMepH/Uxg8v0EQA==
    Referrer
    https://forgotten-games.net/filebase/version-add/4/
    Error Message
    Could not execute statement 'INSERT INTO filebase1_file_upload (userID,filename,fileType,fileHash,filesize,uploadTime) VALUES (?,?,?,?,?,?)'
    Type
    wcf\system\database\exception\DatabaseQueryExecutionException
    File (Line)
    /config/www/fogweb/lib/system/database/statement/PreparedStatement.class.php (144)
    Query Parameter 1
    1
    Query Parameter 2
    'fog-cod2-full.7z'
    Query Parameter 3
    'application/x-7z-compressed'
    Query Parameter 4
    'ba87cf72ba47df657a91dab0fc90005874431739'
    Query Parameter 5
    3644914688
    Query Parameter 6
    1671464741
    Stacktrace
    1. /config/www/fogweb/lib/data/TFastCreate.class.php (44): wcf\system\database\statement\PreparedStatement->execute(…)
    2. /config/www/fogweb/lib/data/DatabaseObjectEditor.class.php (28): wcf\data\DatabaseObjectEditor::dboEditorCreateBase(…)
    3. /config/www/fogweb/filebase/lib/data/file/upload/FileUploadAction.class.php (109): wcf\data\DatabaseObjectEditor::create(…)
    4. /config/www/fogweb/lib/data/AbstractDatabaseObjectAction.class.php (216): filebase\data\file\upload\FileUploadAction->upload(…)
    5. /config/www/fogweb/lib/action/AJAXProxyAction.class.php (92): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    6. /config/www/fogweb/lib/action/AJAXInvokeAction.class.php (111): wcf\action\AJAXProxyAction->invoke(…)
    7. /config/www/fogweb/lib/action/AbstractAction.class.php (57): wcf\action\AJAXInvokeAction->execute(…)
    8. /config/www/fogweb/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
    9. /config/www/fogweb/lib/system/request/Request.class.php (90): wcf\action\AJAXInvokeAction->__run(…)
    10. /config/www/fogweb/lib/system/request/RequestHandler.class.php (107): wcf\system\request\Request->execute(…)
    11. /config/www/fogweb/filebase/index.php (11): wcf\system\request\RequestHandler->handle(…)
    Error Message
    SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for column 'filesize' at row 1
    Type
    PDOException
    File (Line)
    /config/www/fogweb/lib/system/database/statement/PreparedStatement.class.php (126)
    Stacktrace
    1. /config/www/fogweb/lib/system/database/statement/PreparedStatement.class.php (126): PDOStatement->execute(…)
    2. /config/www/fogweb/lib/data/TFastCreate.class.php (44): wcf\system\database\statement\PreparedStatement->execute(…)
    3. /config/www/fogweb/lib/data/DatabaseObjectEditor.class.php (28): wcf\data\DatabaseObjectEditor::dboEditorCreateBase(…)
    4. /config/www/fogweb/filebase/lib/data/file/upload/FileUploadAction.class.php (109): wcf\data\DatabaseObjectEditor::create(…)
    5. /config/www/fogweb/lib/data/AbstractDatabaseObjectAction.class.php (216): filebase\data\file\upload\FileUploadAction->upload(…)
    6. /config/www/fogweb/lib/action/AJAXProxyAction.class.php (92): wcf\data\AbstractDatabaseObjectAction->executeAction(…)
    7. /config/www/fogweb/lib/action/AJAXInvokeAction.class.php (111): wcf\action\AJAXProxyAction->invoke(…)
    8. /config/www/fogweb/lib/action/AbstractAction.class.php (57): wcf\action\AJAXInvokeAction->execute(…)
    9. /config/www/fogweb/lib/action/AJAXInvokeAction.class.php (65): wcf\action\AbstractAction->__run(…)
    10. /config/www/fogweb/lib/system/request/Request.class.php (90): wcf\action\AJAXInvokeAction->__run(…)
    11. /config/www/fogweb/lib/system/request/RequestHandler.class.php (107): wcf\system\request\Request->execute(…)
    12. /config/www/fogweb/filebase/index.php (11): wcf\system\request\RequestHandler->handle(…)

    Ich habe schon mal nach der Fehlermeldung geschaut: Numeric value out of range: 1264 Out of range value for column 'filesize' at row 1 und ein paar Einträge bei Stackoverflow.com gefunden, es soll wohl am Datentyp der Datenbank liegen. Ich bin da aber nicht so bewandert und überlasse das lieber den Profis ;).


    Ich habe nicht an der DB herumgespielt. Nutze MariaDB 10.06.10, falls das von Bedeutung ist.


    Ich hoffe, jemand kann mir helfen.


  • Bitte besonderes Augenmerk auf Beitrag #7 richten. Wenn das noch aktuell ist, wäre die Ursache gefunden.





    Gruß norse

    Zugang zu meinen Arbeiten und dem dazugehörigen Support bekommt Ihr bei Interesse hier.

  • Jau, das scheint das Problem genau zu beschreiben. Wild, dass der Beitrag #7 vom 7. Februar 2020 ist und es bisher noch keine Übergangslösung für das Problem gibt.


    Der "Fix" mit dem Datentyp auf BIGINT stellen wäre ja was. Dann hätte man sicherlich Probleme beim Upgraden auf neuere Versionen beziehungsweise bei Updates. Aber mal ganz ehrlich WoltLab, das kann doch aber auch nicht die Lösung sein.


    Danke Norse für deine schnelle Antwort.

  • Wird mit Version 6.0 angepasst:

  • Na ja, das dauert ja aber noch ein wenig bis die 6.0 kommt, und so lange warten ist auch eher suboptimal. Wie ich gelesen habe, wird dann eh auf BIGINT umgestellt. Ich nutze eh PHP 8 x64. Also könnte ich das doch schon anpassen, oder? Wäre das nur der filehash Datentyp oder gibt es noch weitere, die angepasst werden müssen. In dem Thread, den Norse gepostet hatte, stand ja schon etwas von 2 Werten ändern.

  • Okay. Ich versuche es erneut. Vielleicht erbarmt sich ja jemand und gibt den Hilfe bringenden Tipp.


    Ich habe testweise in der Tabelle filebase1_file_upload und filebase1_file_version -> filesize auf BIGINT gestellt.


    Der Upload der Datei funktioniert nun korrekt. Auch wird der Upload in der Tabelle filebase1_file_version eingetragen. Wenn ich jetzt aber versuche die Datei in der Filebase herunterzuladen, erhalte ich einfach einen Fehler "ERR_INVALID_RESPONSE". Andere Dateien funktionieren weiterhin.


    Besteht wirklich keine andere Möglichkeit, als auf WSC 6 zu warten?

  • Ich glaube nicht, dass das WSC 6 irgendetwas daran ändert. PHP ist einfach nicht zur Auslieferung, oder zum Streamen (großer Dateien) gedacht. Wir hatten für einen Kunden mal ein Plugin gebaut, welches die entsprechende Funktionalität des Webservers (X-Accel bei nginx) genutzt hat. Eine andere Möglichkeit sehe ich hier jedenfalls nicht.

  • Ich glaube nicht, dass das WSC 6 irgendetwas daran ändert. PHP ist einfach nicht zur Auslieferung, oder zum Streamen (großer Dateien) gedacht. Wir hatten für einen Kunden mal ein Plugin gebaut, welches die entsprechende Funktionalität des Webservers (X-Accel bei nginx) genutzt hat. Eine andere Möglichkeit sehe ich hier jedenfalls nicht.

    Vielen Dank für deine Antwort. Mich wundert das etwas. Ich hatte mal ein Konkurrenz-Produkt (Invision Community Suite) getestet. Da gabs die Probleme nicht. Also würde ich als Leihe darauf schließen, dass es was mit der WoltLab Software zu tun hat bzw. limitiert wird. Würde denn dieses Plugin mein Problem beheben? Und verkaufst du das Plugin auch weiter? Oder gibt es eine Exklusivität mit dem Kunden?



    Gibt es denn eine Fehlermeldung im entsprechenden Protokoll?

    Vielen Dank auch dir für deine Antwort. Leider nein. Im WSC wird kein Fehler ausgegeben. Ich habe eben noch die PHP Logs und nginx logs durchgeschaut, auch dort findet sich leider nichts.

    • Official Post

    Hallo,


    ich hatte dieses Thema noch auf meiner ToDo-Liste, um zu prüfen, dass hier nicht tatsächlich noch ein Problem abseits der Datenbank-Struktur vorliegt, am PHP-Code hatten wir diesbezüglich für Filebase 6.0 nämlich nichts geändert.


    Bei mir funktioniert es lokal (nginx + PHP 8.2 + Filebase 6.0) einwandfrei.

    Code
    $ time b2sum /tmp/file.txt 1-450313542ec67196a0c2aa00c9fe32d6c805674e
    78f439f02c2fc87b53f94cf2c1ec0b2228ed8a17f40948767f443800d8a7a471b52c0b72bf952208ea87af11350c5e6d2a7b5fe9f2e5b8e0b57b92f05f88bc56  /tmp/file.txt
    78f439f02c2fc87b53f94cf2c1ec0b2228ed8a17f40948767f443800d8a7a471b52c0b72bf952208ea87af11350c5e6d2a7b5fe9f2e5b8e0b57b92f05f88bc56  1-450313542ec67196a0c2aa00c9fe32d6c805674e
    
    $ curl -fsSL 'https://example.com/filebase/index.php?download/1/' |pv |b2sum
    2.79GiB 0:01:04 [44.3MiB/s] [                            <=>                ]
    78f439f02c2fc87b53f94cf2c1ec0b2228ed8a17f40948767f443800d8a7a471b52c0b72bf952208ea87af11350c5e6d2a7b5fe9f2e5b8e0b57b92f05f88bc56  -
    Code
    php_1      | 172.29.0.5 -  17/Jan/2023:10:09:39 +0000 "GET /filebase/index.php" 200
    nginx_1    | 172.29.0.1 - - [17/Jan/2023:10:10:44 +0000] "GET /filebase/index.php?download/1/ HTTP/2.0" 200 3000000000 "-" "curl/7.68.0" "-"


    Das Problem wird also vermutlich irgendwo in deiner Serverkonfiguration liegen.

  • Hey Tim vielen Dank das du das Thema noch auf'm Zettel hattest. Aber das besagte Problem tritt in der aktuellen Filebase Version auf, nicht in der 6.0 Version. Oder hab ich das gerade falsch verstanden 😄

    • Official Post

    Hallo,

    Oder hab ich das gerade falsch verstanden 😄

    Ja, vermutlich:

    am PHP-Code hatten wir diesbezüglich für Filebase 6.0 nämlich nichts geändert.

    Die Änderung in Filebase 6.0 ist wirklich nur die Änderung an der Datenbankstruktur.


    Manuelle Änderungen an der Datenbankstruktur unterstützen wir zwar grundsätzlich nicht, sollten in diesem Fall aber ausreichend zuverlässig funktionieren, wenn bereits Filebase 5.5 verwendet wird (weil die nächsten planmäßigen Änderungen dann mit 6.0 erfolgen und die eigenen Änderungen dann nicht versehentlich rückgängig gemacht werden). Wenn es also mit Filebase 5.5 + manuelle Änderungen nicht korrekt klappt, dann vermutlich auch mit Filebase 6.0 nicht.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!