2009-09-28 28 views
18

Tôi đang cố gắng chèn dữ liệu vào cơ sở dữ liệu SQlite3 của tôi (điều này hoạt động thông qua dòng lệnh). Tôi đã cung cấp cho các tập tin data1.db 777 và vẫn còn nó nói rằng nó không thể mở tập tin.Không thể ghi vào tệp cơ sở dữ liệu chmod 777 trên SQlite3 qua php 5.3.0

tôi nhận được lỗi này:

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

Sử dụng mã này:

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

Nhưng điều lạ là tôi có thể đọc từ cơ sở dữ liệu: (làm việc này)

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

Tôi đang chạy PHP 5.3.0

+0

Không gian trên thiết bị? – LiraNuna

+2

Bạn không cần phải thực thi quyền trên cơ sở dữ liệu - nó không phải là một tập lệnh hoặc chương trình thực thi. Bạn thường nên tránh truy cập viết công khai - điều đó có nghĩa là bạn không quan tâm đến việc phá hủy cơ sở dữ liệu của bạn bất cứ lúc nào (vì ai cũng có thể làm điều đó nếu tệp có quyền ghi công khai). Vì vậy, tối đa bạn nên sử dụng 666 và tốt nhất là 664 hoặc nhiều quyền hạn nghiêm ngặt hơn. –

+0

Vâng tôi biết, tôi đã thử nghiệm nó để xem đó có phải là lỗi hay không. (may mắn là không). Đã thay đổi quyền của nó trở lại 644 và chuyển nó ra ngoài thư mục www. – Mint

Trả lời

2

Cố gắng thêm người dùng sqlite vào nhóm công ty sở hữu các thư mục/var/www, hoặc sử dụng -R tay chown: hướng dẫn/var/www /, thư mục cần phải được ghi bởi các sqlite người dùng.

+1

Đệ quy thay đổi quyền sở hữu thư mục và tất cả các tệp trong đó có thể là một ý tưởng tồi nếu tất cả những gì cần thiết là cung cấp cho người dùng máy chủ web quyền truy cập ghi vào thư mục và một tệp trong đó. –

1

Chú ý, nếu bạn chạy PHP với CLI, bạn phải sử dụng "sudo -u www-data php script.php" để PHP có thể viết trên sqlite.

Các vấn đề liên quan