Kann nichts in die sqlite DB schreiben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich habe leider ein kleines Problem. Ich möchte gerne mit einem PHP-Skript Daten in eine Datenbank schreiben. Allerdings bekomme ich immer die folgenden Fehlermeldung:

    Code
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 8 attempt to write a readonly database' in /var/www/html/php/functions.php:28 Stack trace: #0 /var/www/html/php/functions.php(28): PDO->query('INSERT INTO Kon...') #1 /var/www/html/php/addConfig.php(37): db_query('INSERT INTO Kon...') #2 {main} thrown in /var/www/html/php/functions.php on line 28

    Und hier noch meinen Code dazu:

    Wäre echt gut, wenn mir hier jemand helfen könnte... Ich bedanke mich auch schon mal für jede Hilfe!

    Gruß Kilian

  • Servus Kilian,
    steht doch eigentlich da, wo das Problem liegt:

    Zitat


    ... General error: 8 attempt to write a readonly database

    Überprüf' mal die Zugriffsrechte der SQLite Datei ...
    Die ist dann wohl nicht für www-data schreibbar.
    Abhilfe: www-data in die Gruppe pi aufnehmen und Schreibrechte für die Gruppe setzen ( man chmod ).

    cu,
    -ds-

  • Also ich habe mal www-data der Gruppe pi hinzugefügt, den Besitzer der DB auf pi geändert und die Zugriffsrechte geändert aber bekomme immer noch die selbe Fehlermeldung :-/

    Code
    -rwxr-xr-x 1 pi pi 39936 Jul  3 18:14 Wetterstation.db
  • Ich habe es jetzt mal auf

    Code
    -rwxrwxr-x 1 pi pi 39936 Jul  3 18:14 Wetterstation.db


    geändert aber jetzt bekomme ich diese Fehlermeldung:

    Code
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 14 unable to open database file' in /var/www/html/php/functions.php:28 Stack trace: #0 /var/www/html/php/functions.php(28): PDO->query('INSERT INTO Kon...') #1 /var/www/html/php/addConfig.php(37): db_query('INSERT INTO Kon...') #2 {main} thrown in /var/www/html/php/functions.php on line 28
  • Hallo Kilian !

    Wenn Du Deinen Dateibrowser auf Listenansicht umschaltest und die Anzeige von Eigentümer, Gruppe, Rechte aktivierst (über die Einstellungen), dann siehst Du direkt im Browser, dass die Rechte des Datenbankfiles mit dem übergeordneten Ordners und dem PHP Script nicht übereinstimmen.
    Und wenn Du obigen Links gefolgt bist, weisst Du auch, dass bei einem Schreibzugriff neben dem Datenbankfile auch ein Sperrfile angelegt wird, damit nicht gleichzeitig mehrere User/Programme das DB-File verändern. Dieses Sperrfile kann natürlich auch nur mit Schreibrechten angelegt werden.


    Servus !

    RTFM = Read The Factory Manual, oder so


  • Also ich habe mal www-data der Gruppe pi hinzugefügt, den Besitzer der DB auf pi geändert und die Zugriffsrechte geändert aber bekomme immer noch die selbe Fehlermeldung :-/

    Code
    -rwxr-xr-x 1 pi pi 39936 Jul  3 18:14 Wetterstation.db

    Wenn etwas am 'www-data' Benutzer geändert wird, wie die Gruppen Zugehörigkeit, muss der Dienst neu gestartet werden damit die Änderungen wirksam werden.

    Allerdings finde ich es allgemein fraglich wieso "pi" weiterhin Rechte auf der SQLite Datenbank Datei behalten sollte?

    Sinnvoller wäre IMHO den Besitzer der Datei zu ändern: chown www-data:www-data /path/to/Wetterstation.db


    PS: Wo liegt die Datenbank Datei überhaupt?

  • Servus ...


    ...
    Wenn etwas am 'www-data' Benutzer geändert wird, wie die Gruppen Zugehörigkeit, muss der Dienst neu gestartet werden damit die Änderungen wirksam werden.


    da verwechselst Du imho was. Das geht sogar, wenn Du den "inoffiziellen" Weg mittels vi /etc/group nimmst. Die Änderung ist sofort wirksam, auch wenn z.B. das Kommando groups die neue Gruppenzugehörikeit nicht anzeigt.
    Irgendein Neustart ist also nicht nötig.

    Ausserdem ist das Schreib-Problem ja schon Geschichte ...

    //EDIT:


    ...
    Sinnvoller wäre IMHO den Besitzer der Datei zu ändern: chown www-data:www-data /path/to/Wetterstation.db


    Warum? Du erzeugst ja vermutlich auch keine Datenbank, vergibst an www-data die Administrator-Rechte daran und gewährst dann dem Nutzer pi lediglich Schreib/Leserechte auf die Tabellen, oder?


    ...
    Allerdings finde ich es allgemein fraglich wieso "pi" weiterhin Rechte auf der SQLite Datenbank Datei behalten sollte?
    ...


    Dazu hat der TO weder etwas gesagt noch eine Frage gestellt. Ich lege meine Tabellen auch mit meinem Nutzer an um sie ggf. zu erweitern oder anderweitig zu verändern, z.B. mal (physikalisch) zu löschen und neu zu erzeugen. www-data z.B. bekommt dann eben Gruppen-Schreibrechte ... genau für diesen Fall wurde dieser Mechanismus mal erdacht.

    Also für mich gilt bei Änderungen am System immer noch: so viel wie nötig, so wenig wie möglich.

    cu,
    -ds-

  • In diesem Fall soll vermutlich nur die Webseite auf die Datenbank zugreifen - wieso sollte dann weiterhin "pi" Dateirechte behalten?



    Servus ...


    da verwechselst Du imho was. Das geht sogar, wenn Du den "inoffiziellen" Weg mittels vi /etc/group nimmst. Die Änderung ist sofort wirksam, auch wenn z.B. das Kommando groups die neue Gruppenzugehörikeit nicht anzeigt.
    Irgendein Neustart ist also nicht nötig.

    Bei mir ist das aber so:


    Gruppenzugehörigkeit geändert:

    Code
    sudo usermod -a -G pi www-data


    Über www aufgerufene 2. Ausgabe:

    Code
    array(1) {
      [0]=>
      string(53) "uid=33(www-data) gid=33(www-data) groups=33(www-data)"
    }


    ...genau das was ich oben sagte....

    Dienst neu gestartet:

    Code
    sudo service apache2 restart

    Über www aufgerufene 3. Ausgabe:

    Code
    array(1) {
      [0]=>
      string(62) "uid=33(www-data) gid=33(www-data) groups=33(www-data),1000(pi)"
    }

    Oder mache ich was falsch? :-/

    => http://raspberrypi.roxxs.org/www-data.mp4

  • oops ... mein Fehler ... :blush:
    Das file hatte noch eine andere Gruppe ... sorry.

    //EDIT:


    In diesem Fall soll vermutlich nur ...


    wenn ich mich recht erinnere, dann haben wir mehrfach festgestellt, dass wir uns ausschliesslich auf die Fragen/Aussagen der Nutzer konzentrieren wollten statt zu spekulieren ... ;)
    Ausserdem macht es imho durchaus Sinn, so wie es ist.

    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!