PHP и SQLite

Модератор: Модераторы разделов

Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

PHP и SQLite

Сообщение Corsair »

Нужно включить поддержку SQLite в PHP-сценариях. PHP из пакета и собирать его из исходников нет особого желания, в крайнем случае только
Пол дня провел за поиском, но так ничего хорошего и не нашел.

Пакет php-pdo установлен, модули pdo и pdo_sqlite загружены и ДОЛЖНЫ работать, но при попытке использования sqlite из сценария

Код: Выделить всё

<?
    $db = new SQLiteDatabase("mydb.db");
    if(!$db) echo "Failed";
?>


или

Код: Выделить всё

<?
    $db = new PDO("sqlite:/var/www/html/mydb.db");
    if(!$db) echo "Failed";
?>


возвращается пустая страница, даже ошибок никаких не выводится, чистый белый лист, база при этом не создается.

phpinfo показывает что драйвер sqlite включен.
скрин1
скрин2

В общем я голову с самого утра ломаю.
php 5.2.4
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

все еще актуально
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: PHP и SQLite

Сообщение diesel »

Это больше в программирование вопрос ...
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

diesel, проблема тут не в программировании. Я не могу прикрутить поддержку SQLite к PHP - это скорее к администрированию ближе
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
Jonnywalker
Сообщения: 60
ОС: Debian

Re: PHP и SQLite

Сообщение Jonnywalker »

Если пустой экран и ничего нет, то первым делом добавляем в начало сценария:
error_reporting(E_ALL);

или
ini_set('error_reporting', E_ALL);

Ещё можно после каждой строчки
print __LINE__;
чтобы поймать, проходит он проблемный код или обрывается на нём.
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

Jonnywalker

Код: Выделить всё

<?
    ini_set('error_reporting', E_ALL);print __LINE__;
    $db = new SQLiteDatabase("mydb.db"); print __LINE__;
    if(!$db) echo "Failed"; print __LINE__;
?>

или

Код: Выделить всё

<?
    ini_set('error_reporting', E_ALL);print __LINE__;
    $db = new PDO("sqlite:/var/www/html/mydb.db"); print __LINE__;
    if(!$db) echo "Failed"; print __LINE__;
?>


Выводится номер второй строки, никаких ошибок не выводится. Проблема точно в SQLite, но это я итак знаю, только как ее решить ума не приложу... Больше всего смущает кристально чистая страница.
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
sarutobi
Сообщения: 676
Статус: Добрость и скромнота
ОС: Debian 5, FreeBSD 6.2/8.0

Re: PHP и SQLite

Сообщение sarutobi »

Corsair,
а если немного подумать?
Ваши скрипты должны выдавать что-то, если произошла ошибка . Если не произошла - то он честно молчит. По этой же причине из последнего примера выдается номер строки .
А насчет "не создается база" - Вы точно уверены что она должна создаться на открытии новой БД? Для файлов такой фокус срабатывает, но движок sqlite может создавать файл БД по другим событиям (create insert etc....)
Fire and water, earth and sky - mistery surrounds us, legends never die!
Спасибо сказали:
Аватара пользователя
Jonnywalker
Сообщения: 60
ОС: Debian

Re: PHP и SQLite

Сообщение Jonnywalker »

База создаётся сразу по открытии, сам проверил.
Если скрипт помирает в процессе создания базы, пусть и молча, то он и номер второй строки отдавать не должен!
Если всё нормально, то при отсутсвии {} в if должен выдаваться номер и первой, и второй, и третьей строки, т.к. print __LINE__ уже за пределами действия if ...
А значит скрипт помирает после создания базы .... странно

Возможно в силу каких-нибудь специфических настроек сообщения об ошибках всё же подавляются. Может элементарно нет прав на запись в этом каталоге.
Ещё смущает на скриншоте --disable-pdo
Можно попробовать использовать процедурный стиль и расширение sqlite (sqlite_open("my.db") ), хотя, как пишут в мануале, оно тоже завязано на pdo
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

Jonnywalker, вот и я о том же, --disable-pdo, хотя пакет php-pdo стоит и модули PDO и PDO_sqlite загружены. PHP самый обычный, из пакета. На сборном PHP у меня раньше все прекрасно работало, да только как-то не хочется из-за одного sqlite собирать PHP из сырцов, разобраться хочу с PDO.

sarutobi, то, что база должна создаваться я уверен, опыт работы с SQLite у меня есть
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
Jonnywalker
Сообщения: 60
ОС: Debian

Re: PHP и SQLite

Сообщение Jonnywalker »

Ещё можно повысить уровень LogLevel до info или даже debug в конфигурации apache, перезапустить сервер и почитать его error.log после выполнения скрипта.
Или попробовать запустить скрипт в консоли...

Чтобы поймать хоть какое-нибудь сообщение об ошибке.
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

В общем с SQLite разобрался. Первый вариант синтаксиса работает только на сборном PHP, во втором случае у апача небыло прав на запись. Правда меня теперь другой вопрос интересует - вывод ошибок. Из-за этого-то я и промаялся столько, пока не пусканул скрипт в консоли. Ни ошибок, ни предупреждений не выводится вообще. В php.ini error_display = On и error_reporting = E_ALL. Пробовал делать то же самое из скрипта. Натравил скрипт на директорию с отсутствующими правами на запись, PHP все равно молчит - чистая страница. Может еще что-то покрутить надо? Раньше вывод ошибок был по-умолчанию, я и проблемы такой не знал...

Jonnywalker, спасибо за помощь=)
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
Jonnywalker
Сообщения: 60
ОС: Debian

Re: PHP и SQLite

Сообщение Jonnywalker »

error_display = On


Вроде эта директива называется display_errors

здесь мануал по ошибкам

Но на боевом сервере отображение ошибок лучше выключить :)
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

Ну в конфиге я правильно написал. Тут просто по памяти писал=)
На боевом-то понятно, но этот таковым не является.
Вроде бы этих двух директив должно хватать... правда там написано, что при возникновении фатальной ошибки на экран ничего не выводится. Домой приеду, попробую на какой-нибудь попроще ошибке протестить, типа деления на ноль.
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

Код: Выделить всё

<?
    ini_set('error_reporting', E_ALL); print __LINE__;
    $a = 1/0; print __LINE__;
    echo $a; print __LINE__;
?>


Итог: 234 и никакого намека на ошибку...
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
Jonnywalker
Сообщения: 60
ОС: Debian

Re: PHP и SQLite

Сообщение Jonnywalker »

А это и не критическая ошибка.

Можно ещё поиграть уровнями error_reporting, у меня, например, предупреждения показываются при error_reporting = E_ALL & ~E_NOTICE
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

Jonnywalker, ну так вот если это НЕ критическая ошибка, то предупреждение полюбому должно быть.
Можно взглянуть на ваш php.ini?
Жестокий стоячий админ (с) коллега
Спасибо сказали:
Аватара пользователя
Jonnywalker
Сообщения: 60
ОС: Debian

Re: PHP и SQLite

Сообщение Jonnywalker »

Вот наконец-то добрался до пингвина дома :)
Стандартный файл из ubuntu, ничего вроде даже не менял.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
Corsair
Сообщения: 842
Статус: Местный "тролль"
ОС: Fedora

Re: PHP и SQLite

Сообщение Corsair »

Проблема решилась прописыванием php_flag display_errors On в httpd.conf. Только мне все равно не ясно почему эта директива игнорировалась в php.ini. Ну да ладно, главное работает, чему я несказанно рад. Благодарю за советы
Жестокий стоячий админ (с) коллега
Спасибо сказали: