今天,被sqlite的一個機制給坑了。本人用C語言寫的cgi程序去訪問sqlite數據庫,讀取沒有問題,但是插入新紀錄和更新數據就不行,在服務器上直接對數據庫進行增刪查改則沒有任何問題。但瀏覽器上訪問並且對數據庫有寫的操作時,則報錯誤:
unable to open database file
本人在網上查找了很久,沒有找到直接相關的答案。偶在一個百度問答上看到sqlite庫在對數據庫進行操作時(本人估計是寫操作),會在數據庫的當前文件夾下創建一個臨時文件,當操作結束時,該臨時文件將被刪除。 而遠程用戶一般不具備有對臨時文件足夠的權限 所以會造成 無法打開、寫或者刪除臨時文件。解決的方法就是遞歸地(加-R)將數據庫所在文件夾設置為任何用戶都有可讀可寫可刪的權限。假如sqlite數據庫路徑為/opt/lampp/cgi-bin/, 則:
chmod -R 777 /opt/lampp/cgi-bin/