Суть вопроса такова. Имеется база данных Fiurebird 1.5 на сервере под Windows XP.
Далее, имеется сервер, в котором она подсоединена в unixODBC.
Сервер Gentoo, PHP-5.6.9, unixODBC-2.3.2
Имеется скрипт на PHP, который подключается к этой базе данных, делает выборку, записывает её в файл. Всё просто. Но понадобилось нарастить функциональность, для чего потребовалось ещё одно обращение к этой БД. Вот тут-то и началось. При втором обращении выпадает и кричит, что мало памяти.
Для демонстрации этого эффекта был написан скрипт...
CODE ( htmlphp):
скопировать код в буфер обмена
#!/usr/bin/php <?php # Устанавливаем системные переменные # Подключаемся к базе данных # Формируем и выполняем 1-й запрос на получение информации $odbc_query = "select distinct DEPARTMENT from PERSONNEL"; # Построчно обрабатываем полученные из базы данных записи и выводим их while ($pers_info = odbc_fetch_array($odbc_result)) echo $pers_info["DEPARTMENT"]."\n"; # Переподключаемся к базе данных #odbc_close($odbc_header); #$odbc_header = odbc_connect("acs", "", "");
# Формируем и выполняем 2-й запрос на получение информации $odbc_query = "select distinct FIRMA from PERSONNEL"; $odbc_result = odbc_prepare($odbc_header, $odbc_query); # Здесь обваливается... # Построчно обрабатываем полученные из базы данных записи и выводим их while ($pers_info = odbc_fetch_array($odbc_result)) echo $pers_info["FIRMA"]."\n"; ?>
Первая выборка идёт нормально, я получаю список номеров подразделений, а вот вторая выборка обрушивает скрипт.
CODE ( htmlphp):
скопировать код в буфер обмена
9 90 91 92 93 94 PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 13684237551378890813 bytes) in /root/server_config/europa/test/test.crash.php on line 26 Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 13684237551378890813 bytes) in /root/server_config/europa/test/test.crash.php on line 26 Press any key to continue...
Причём не зависимо от того, производилось переподключение к базе данных или нет. Результат одинаковый.
Видно, что не хватает памяти для этого, в общем-то, простейшего скрипта. Но то количество, которое запрашивается, впечатляет, не уверен, что столько памяти было вообще выпущено во всём мире.
На всякий случай, параметры unixODBC
CODE ( htmlphp):
скопировать код в буфер обмена
/etc/unixODBS/odbc.ini [acs] Description = Firebird Driver = Firebird Dbname = 172.16.77.33:C:\ACS\Base\ACS.FDB User = WEB Password = ****** Role = CharacterSet = WIN1251 ReadOnly = Yes NoWait = No /etc/unixODBC/odbcinst.ini [Firebird] Description = Firebird ODBC Driver Driver = /usr/lib/libOdbcFb.so Setup = /usr/lib/libOdbcFb.so Threading = 1 FileUsage = 1 CPTimeout = CPReuse =
Есть ли какие-то мысли?(Отредактировано автором: 16 Июля, 2015 - 11:24:19)
|