SSH php pdo_sqlite benötigt

  • Moin!

    Ich benutze eine Nextcloud 15 mit sqlite-Datenbank auf einem Webhosting 4000, die ich gerne zu einer MySQL-Datenbank konvertieren würde. Da Nextcloud 15 nicht mehr mit php5.6 arbeitet, probiere ich:

    Code
    /usr/local/php70/bin/php occ

    bekomme und bekomme als Fehlermeldung:

    Code
    An unhandled exception has been thrown:
    Doctrine\DBAL\DBALException: Failed to connect to the database: An exception occured in driver: could not find driver in /httpdocs/nextcloud/lib/private/DB/Connection.php:64

    Nach einger Recherche, stellte ich fest, dass vermutlich eine PHP-Extension fehlt. Mit get_loaded_extensions() lies ich mir die PHP-Erweiterungen anzeigen und stellte fest, dass pdo_sqlite in php7.x nicht mehr dabei ist, was meines Wissens für die Nextcloud benötigt wird, um auf die sqlite-Datenbank zuzugreifen.


    Zum Einen hätte ich die Möglichkeit, Netcup drum zu bitten, diese Extension für diese PHP-Version hinzuzufügen. Da habe ich keine Ahnung, wie groß die Wahrscheinlichkeit ist und würde es Montag einfach mal telefonisch erfragen.


    Alternativ fragte ich mich, wieso ein Aufruf über den Browser diese Extension beinhaltet, ein Aufruf mit der gleichen PHP-Version über die Konsole aber nicht? Gibt es eine Möglichkeit, über die Konsole die gleiche PHP-Version wie mit einem Browser zu nutzen?


    Oder, weitere Alternative: Schafft man es, über den Browser ein PHP-Skript zu öffnen, welches die occ ausführt? Habe bereits ein paar Versuche unternommen, indem ich ein PHP-Skript schrieb, mit dem ich die occ oder direkt die console.php aufrief.

    console.php:

    PHP
    <?php
    $argv = array();
    $argv[0] = "occ";
    require "occ"; // Oder Alternativen
    ?>
    • Mit require "occ"; erhalte ich einen "internen Server-Fehler" auf einer Nextcloud-Seite
    • Mit require "console.php"; erhalte ich "This script can be run from the command line only"
    • Mit echo shell_exec("/usr/local/php70/bin/php occ"); erhalte ich die gleiche Fehlermeldung, wie direkt aus der Konsole aufgerufen (was ja irgendwie auch Sinn ergibt)


    Jetzt hoffe ich darauf, dass ihr möglicherweise noch ne Idee habt, wie man das occ zum Laufen bekommt ohne darauf warten zu müssen, dass Netcup die Erweiterung zulässt (falls Netcup es überhaupt machen würde)?


    Schöne Grüße

    Julian

  • Ich verweise mal auf https://forum.netcup.de/anwend…l-ist-php-5-6/#post113894 - Bist du sicher das bei dir auch die korrekte PHP-Version von netcup verlinkt wurde?

    Jup.

    Code
    /usr/local/php70/bin/php -v
    PHP 7.0.33 (cli) (built: Dec 20 2018 16:06:05) ( NTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
        with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v10.0.2, Copyright (c) 2002-2017, by ionCube Ltd.

    Aber wie im anderen Thread beschrieben, geht bei mir 7.2 auch nicht:

    Code
    /usr/local/php72/bin/php -v
    PHP 5.6.40-0+deb8u1 (cli) (built: Feb 17 2019 01:19:33)
    Copyright (c) 1997-2016 The PHP Group
    Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
        with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
  • Jetzt hoffe ich darauf, dass ihr möglicherweise noch ne Idee habt, wie man das occ zum Laufen bekommt ohne darauf warten zu müssen, dass Netcup die Erweiterung zulässt (falls Netcup es überhaupt machen würde)?


    Schöne Grüße

    Julian

    Die App OCC Web vielleicht? Obwohl ich befürchte, dass das wahrscheinlich auch nur über einen erzeugten Konsolenprozess läuft.

  • Die App OCC Web vielleicht? Obwohl ich befürchte, dass das wahrscheinlich auch nur über einen erzeugten Konsolenprozess läuft.

    Vielen Dank für diesen Tipp!!


    Tatsächlich funktioniert OCC Web! Dummerweise hat OCC Web einen Bug, sodass die Frage, ob die Konvertierung fortgeführt werden soll nicht angezeigt wird und ich auch nicht darauf antworten kann. Daher habe ich schlicht die Meldung deaktiviert (dort beschrieben: https://help.nextcloud.com/t/c…th-single-command/39721/7). Zudem war die Datenbank zu groß, als das die PHP-Ausführungszeit zur Konvertierung gereicht hätte. Deshalb habe ich in der Funktion convertDB in der foreach-Schleife die Konvertierung von drei Tabellen hiermit übersprungen:


    Code
                    if ($table == "oc_activity")
                        continue;
                    if ($table == "oc_file_locks")
                        continue;
                    if ($table == "oc_filecache")
                        continue;

    Dadurch konnte die Datenbank innerhalb der php-execution-time konvertiert werden. Anschließend bin ich direkt in den Wartungsmodus gegangen und habe in der Config den MySQL-Zugang kaputt gemacht, sodass Nextcloud noch nicht in der Datenbank rumfuschen kann. Dann mit phpLiteAdmin die fehlenden Datenbanken als CSV exportiert und mit phpMyAdmin ins mysql geladen. (Was dann seine Zeit dauerte und ebenfalls etappenweise geschah) Dann die mysql-Einstellungen in der config repariert und aus dem Wartungsmodus gegangen.


    Und so wie es scheint, läuft die Nextcloud nun mit MySQL :)

  • Abschließendes Feedback von meiner Seite:


    Auf eine neue PHP Version wechseln dauert ja nur maximal 5 Minuten, daher habe ich jetzt alle 7er PHP Fälle mal durch getestet:


    PHP Version 7.0.33: OK (Bei der Liste der geladenen PDO Treiber auch mit dabei)

    PHP Version 7.1.29: OK (Bei der Liste der geladenen PDO Treiber auch mit dabei)

    PHP Version 7.2.18: OK (Bei der Liste der geladenen PDO Treiber auch mit dabei)

    PHP Version 7.2 (=7.2.16): Connection failed: could not find driver (Bei der Liste der geladenen PDO Treiber auch nicht mit dabei)

    PHP Version 7.3 (=7.3.3): Connection failed: could not find driver (Bei der Liste der geladenen PDO Treiber auch nicht mit dabei)

  • Und hier noch das Feedback vom Support:


    Guten Tag,


    wir bieten verschiedene PHP Versionen an. Die Versionen mit nur einer Nachkommastelle sind dabei von uns kompiliert und verwaltet. Die Versionen mit dem vollständigen Versionsstring, kommen direkt von Plesk. Dadurch kann sich ein unterschiedliches Set an zur Verfügung stehenden Extensions ergeben. Wir werden Ihren Wunsch nach sqlite bei der Kompilierung künftiger Updates der von uns bereitgestellten Versionen berücksichtigen.


    Mit freundlichen Grüße

  • Hallo,

    ich moechte in Zukunft auf Sqlite mit PDO nutzen. Kann mir jemand sagen, welche SQLite version der server verwendet, oder wie ich das herausfinden kann? Oder muss ich das selbst installieren? Wichtig ist das, da SQLITE ab bestimmten Versionen neue Features implementiert.


    Code
    bash-4.4$ php -v
    PHP 7.4.10 (cli) (built: Sep  4 2020 13:28:23) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies
        with the ionCube PHP Loader + ionCube24 v10.4.0, Copyright (c) 2002-2020, by ionCube Ltd.
        with Zend OPcache v7.4.10, Copyright (c), by Zend Technologies