Я все утро пытаюсь заставить php работать с базой данных sqlite. Вот фрагмент кода php, который я пытаюсь выполнить:
#less /var/www/html/test.php
<?php
$db=new PDO("sqlite:/var/www/test.sql");
$sql = "insert into test (login,pass) values ('login','pass');";
$db->exec($sql);
?>
Вот как я проводил тесты:
# sqlite3 /var/www/test.sql
sqlite> create table test (login varchar,pass varchar);
#chown apache:apache /var/www/test.sql
#chmod 644 /var/www/test.sql
Вот что меня бесит: когда я выполняю из командной строки:
#php test.php
все идет хорошо. Sql выполняется, и я вижу, что в базе данных появляется новая строка.
Когда я выполняю тот же сценарий из браузера, sql не выполняется. Я не получаю новую строку в базе данных. В файле журнала apache нет ошибок.
Пожалуйста помоги
ОБНОВИТЬ:
Хорошо, у меня есть ответ. Похоже, sqlite пытается создать новый файл -journal по запросу "INSERT". горные породы:
open("/var/www/test.sql-journal", O_RDWR|O_CREAT|O_EXCL|O_LARGEFILE, 0644) = -1 EACCES (Permission denied)
Итак, мне пришлось переместить базу данных sqlite в каталог, в который apache мог писать.
Командная строка PHP и PHP, выполняемые на веб-сервере, обычно используют другой файл php.ini, поэтому стоит проверить любые различия. У вас также могут быть установлены разные версии PHP, убедитесь, что у командной строки и веб-сервера одинаковая версия. Я видел серверы, на которых Apache запускал PHP5, но в командной строке php запускался PHP4, если вы не использовали полный путь к двоичному файлу PHP5.