Sqlite3, пользователи Apache и простая установка - PullRequest
0 голосов
/ 10 февраля 2010

Я пишу небольшое приложение, которое должно иметь очень простой процесс установки. В первой версии вместо базы данных использовался файл csv, поэтому приоритет # 1 для v2 - это использование sqlite. Я много использовал sqlite с Ruby, и мне это нравится, но я впервые использую его с PHP.

По сути, для того, чтобы SQlite3 мог вставляться в БД, мне нужно было сделать как файл database.sqlite3, так и папку, содержащую его, в собственности пользователя apache. Из чтения документов это кажется нормальным.

Однако apache не всегда будет работать под одним и тем же пользователем. Здесь это 'http', но я знаю, что в Ubuntu это 'www-data', верно?

Итак, есть ли хороший способ определить имя пользователя, под которым работает Apache, и изменить его, или я ошибаюсь? Это должно быть что-то, что я могу просто вставить в скрипт установки, так как люди, которые используют это приложение, не знают или не заботятся о таких мелких деталях, как эта.

Спасибо.

1 Ответ

1 голос
/ 10 февраля 2010

Я полагаю, что вы делаете это с неправильной стороны: вам нужно, чтобы база данных SQLite была доступна для записи сценарием PHP, насколько я понимаю, и это может отличаться от пользователя Apache. Если PHP установлен как модуль Apache, он унаследует пользователя Apache, но гораздо более распространенным случаем на общих серверах является настройка PHP как CGI в suphp или phpsuexec, поэтому сценарии запускаются с разрешениями сам пользователь.

Я бы посоветовал вам написать сценарий install.php для создания папки и базы данных, чтобы оба они наследовали разрешения сценария, независимо от того, какой он пользователь. Смотрите руководство для mkdir () и sqlite_open () . Если ничего не работает, всегда есть chmod () .

Поскольку вы специально цитируете SQLite v. 3, вы можете проверить версию сервера с помощью phpversion () ; В PHP 5.3 функции sqlite_ * работают с версией 3, PHP 5.2 и ниже понимают версию 2. Чтобы использовать версию 3 в PHP 5.2, вы должны использовать pdo_sqlite .

...