2009-09-28 4 views
18

Ich versuche, Daten in meine SQlite3-Datenbank einzufügen (dies funktioniert über die Befehlszeile). Ich gab der Datei data1.db 777 Berechtigungen und immer noch heißt es, es ist nicht in der Lage, die Datei zu öffnen.Schreiben in eine chmod 777-Datenbankdatei auf SQlite3 über PHP 5.3.0 nicht möglich

ich diesen Fehler:

Warning: SQLite3::exec() [sqlite3.exec]: unable to open database file in /var/www/test.php on line 3 

Mit diesem Code:

$db = new SQLite3('./data1.db'); 
$db->exec("INSERT INTO table1 (fileName) VALUES ('test.txt')"); 

Aber das Merkwürdige ist, dass ich aus der Datenbank lesen: (funktioniert)

print_r($db->querySingle('SELECT fileName FROM table1', true)); 

Ich benutze PHP 5.3.0

+0

Platz auf dem Gerät? – LiraNuna

+2

Sie sollten keine Ausführungsberechtigung für die Datenbank benötigen - es ist kein ausführbares Skript oder Programm. Sie sollten normalerweise öffentlichen Schreibzugriff vermeiden - das bedeutet, dass es Ihnen egal ist, wer Ihre Datenbank zu irgendeinem Zeitpunkt zerstört (weil jeder es tun kann, wenn die Datei öffentliche Schreibberechtigung hat). Sie sollten also höchstens 666 und vorzugsweise 664 oder strengere Berechtigungen verwenden. –

+0

Ja, ich weiß, ich habe es nur getestet, um zu sehen, ob das der Fehler war oder nicht. (Zum Glück war es nicht). Die Berechtigungen wurden wieder auf 644 zurückgesetzt und außerhalb des www-Verzeichnisses verschoben. – Mint

Antwort

2

Versuchen Hinzufügen der SQLite-Benutzer zu der Gruppe, die die/var/www-Verzeichnisse besitzt, oder manuell chown -R Benutzer: Benutzer/var/www /, muss das Verzeichnis von der SQLite beschreibbar sein Benutzer.

+1

Die rekursive Änderung des Besitzes des Verzeichnisses und aller darunter befindlichen Dateien wäre wahrscheinlich eine sehr schlechte Idee, wenn dem Webserver-Benutzerkonto lediglich Schreibzugriff auf das Verzeichnis und eine Datei in diesem Verzeichnis gegeben werden muss. –

1

Achtung, wenn Sie PHP mit CLI ausführen, müssen Sie "sudo -u www-data php script.php" verwenden, damit PHP auf sqlite schreiben kann.