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
    1. /usr/local/php70/bin/php occ

    bekomme und bekomme als Fehlermeldung:

    Code
    1. An unhandled exception has been thrown:
    2. 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
    1. <?php
    2. $argv = array();
    3. $argv[0] = "occ";
    4. require "occ"; // Oder Alternativen
    5. ?>
    • 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
    1. /usr/local/php70/bin/php -v
    2. PHP 7.0.33 (cli) (built: Dec 20 2018 16:06:05) ( NTS )
    3. Copyright (c) 1997-2017 The PHP Group
    4. Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    5. 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
    1. /usr/local/php72/bin/php -v
    2. PHP 5.6.40-0+deb8u1 (cli) (built: Feb 17 2019 01:19:33)
    3. Copyright (c) 1997-2016 The PHP Group
    4. Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    5. 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
    1. if ($table == "oc_activity")
    2. continue;
    3. if ($table == "oc_file_locks")
    4. continue;
    5. if ($table == "oc_filecache")
    6. 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 :)