Ich habe eine kleine Perl-basierte CGI-Anwendung, die ich im Projekt-Webspace für ein SourceForge-Projekt ausführe. Diese Anwendung speichert Daten in einer SQLite (v. 3) Datenbankdatei.
Wenn ich Testskripte über eine Shell ausführe, kann ich von dieser SQLite-Datei lesen und in sie schreiben. Wenn der CGI-Code jedoch von Apache ausgeführt wird, hat er nur Lesezugriff. Schreibvorgänge führen zu einem Fehler in der Protokolldatei:
error.log.web-2:[Wed Oct 27 14:40:22 2010] [error] [client 127.0.0.1] DBD::SQLite::db do failed: unable to open database file
Zu Testzwecken habe ich die Berechtigungen für die SQLite-Datei auf 777 erhöht. Kein Unterschied.
Allerdings gibt es ein paar lustige Vorbehalte gegen SourceForges Projekt-Webspace, und ich frage mich, ob ich dadurch in die Irre geführt werde. Im Allgemeinen ist das Dateisystem des Webservers für den Apache schreibgeschützt. Wenn Sie Dateien haben, die zur Laufzeit beschreibbar sein müssen, sollten Sie diese in einem speziellen "persistenten" Verzeichnis an anderer Stelle speichern... und Symlinks von Ihrem Webspace zu den tatsächlichen Dateien in diesem Verzeichnis erstellen.
Ich habe dies getan, und die Berechtigungen sind auf 777 für beide Symlinks gesetzt et die eigentliche SQLite-Datei unter dem Speicherort "persistence". Ich weiß, dass dieser Mechanismus im Allgemeinen funktioniert, weil ich dasselbe mit Cache- und Protokolldateien mache und es dort funktioniert.
Ich frage mich, ob es etwas funky über SQLite selbst, entlang der Linien von es nicht wollen, einen Symlink (anstatt eine Rohdatei) für das Schreiben zu öffnen.