Если вы уверены, что в вашей программе нет утечек памяти , попробуйте:
-Xmx1g
. -XX:+UseConcMarkSweepGC
. Если необходимо, ограничение limit можно отключить, добавив опцию -XX:-UseGCOverheadLimit
в командной строке.
Kyle, для PDO/Sqlite для работы Вы должны записать разрешение в каталог, где Ваша база данных находится.
Кроме того, я вижу, что Вы выполняете несколько выборов в цикле. Это может быть в порядке при создании чего-то маленького и не тяжелые загруженный. Иначе я предложил бы создать единый запрос, который возвращает несколько строк, и обработайте их в отдельном цикле.
Я думаю, что PHP обычно работает как пользователь "nodody". Не уверенный в на Mac все же. Если Mac имеет whoami, Вы могли бы попробовать echo exec('whoami');
узнать.
@Tom Зависит от того, как настроен хостинг. Если сервер запускает PHP как модуль Apache, то вполне вероятно, что это «никто» (обычно любой пользовательский apache настроен как). Но если PHP настроен как cgi (например, fast-cgi) и на сервере запущен SuExec, то php запускается от имени того же пользователя, которому принадлежат файлы.
В любом случае папка, которая будет содержать базу данных, должна быть доступна для записи сценарию, либо для того же пользователя, либо если для пользователя php установлено разрешение на запись.
@Michal Кроме того, можно использовать beginTransaction (); выполните все необходимые действия, затем comit (); чтобы на самом деле их комитировать.
Ну, у меня была такая же проблема и я решил ее по ошибке: просто поместите каждый вставляющий кусок инструкции SQL внутрь блока try...catch
, который он проходит. Это заставляет вас делать все правильно, иначе ничего не получится. Ну, теперь все работает. Удачи всем, у кого еще есть такая проблема (поскольку я сам использовал эту тему, чтобы попытаться решить свою проблему).