Функции OCI8 не найдены при запуске apache с php5 - PullRequest
1 голос
/ 06 апреля 2010

Я пытаюсь настроить сервер для проекта в моем классе баз данных. Я напишу проект на php, разверну его через apache и подключусь к удаленному серверу Oracle. У меня проблемы с частью соединения оракула. У меня установлен модуль OCI8 с InstantClient версии 10.2. Я думал, что это работает, потому что, когда я запустил следующую программу из консоли, я получил правильный вывод.
Программа:

<?php
$conn = oci_connect("asdf", "asdf", "asdf");
if (!$conn) {
   die("connection error\n");
}

$stid = oci_parse($conn, 'SELECT * FROM PARTS');
if (!$stid) {
   die("statement parsing error\n");
}

$r = oci_execute($stid);
if (!$r) {
   die("execution error\n");
}

print "<table border='1'\n";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
   print "<tr>\n";
   foreach ($row as $item) {
      print "\t<td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
   }
   print "</tr>\n";
}
print "</table>\n";

oci_free_statement($stid);
oci_close($conn);
?>

Результат:
<table border='1'>
<tr>
<td>1</td>
<td>wrench</td>
<td>silver</td>
</tr>
<tr>
<td>2</td>
<td>hammer</td>
<td>brown</td>
</tr>
</table>

Так что я думал, что все в порядке. Но когда я захожу на ту же страницу php в браузере, я получаю следующее сообщение об ошибке:
Fatal error: Call to undefined function oci_connect() in /home/eric/apache2/htdocs/realestate/basicQuery.php on line 2
Я подумал, что это может означать, что две разные версии php используются для командной строки и в apache, поэтому я запустил phpinfo (); для обоих. Но они оба вернулись с одной и той же php-информацией (версия PHP 5.2.10-2ubuntu6.4). Они используют разные файлы php.ini (/etc/php5/apache2/php.ini и /etc/php5/cli/php.ini), но оба они абсолютно одинаковы. Я не знаю, где еще искать что-то, что может отличаться в одной среде от другой.
Спасибо за любую помощь!

Ответы [ 3 ]

0 голосов
/ 18 декабря 2015

В вашей системе установлено расширение oci8 ? Убедитесь, что если его нет, установите его по ссылкам ниже?

Для понимания обратитесь к этому. Установка расширения oci8 в linux для php?

Чтобы получить четкие инструкции по установке, обратитесь по этой ссылке. http://www.oracle.com/technetwork/articles/dsl/technote-php-instant-12c-2088811.html

Проверьте файл php.ini, установлены ли у вас следующие вещи.

extension=oci.so

extension_dir="Your path where .so files are present"

После установки необходимо перезапустить apache . Дайте мне знать, если это вам поможет.

0 голосов
/ 24 мая 2017

Это может быть много чего, модуль OCI8 не установлен должным образом, не загружен apache или даже зависимость не установлена.

Установка OCI8

Самый простой способ установить OCI8 - использовать pecl:

pecl install oci8-2.0.12 # for PHP 5.5/6

Включение модуля

Затем вам нужно загрузить его, поместив extension=oci8.so в ваш php.ini.

Теперь убедитесь, что в вашей конфигурации extension_dir есть файл oci8.so. Это можно найти в phpinfo или выполнить php -i | grep extension_dir. Например, у меня /usr/lib/php/20131226.

Перезапустите ваш apache, выполнив apachectl restart и посмотрите, есть ли в вашем phpinfo конфигурация oci8.

Милосердный выстрел

Если вы попробовали все, и это не сработало (это уже случилось со мной), убедитесь, что в вашей системе установлено libaio1. Если это не так, установите его, выполнив apt install libaio1 и перезапустите Apache. В моем случае это помогло. Надеюсь, это поможет.

0 голосов
/ 07 апреля 2010

PHP должен знать, откуда загрузить его расширение (это связывает между PHP и Oracle, поставляемыми библиотеками).Поскольку он работает из интерфейса командной строки, вы, похоже, установили пакет.

Если файлы ini совпадают, вам также необходимо проверить:

1) вы не забыли перезапустить apacheпосле настройки oracle libs?

2) ваш веб-сервер работает как chroot?

3) каковы разрешения для расширения oci8?(т. е. доступен ли для чтения веб-серверу uid)

Вам также необходимо добавить путь к файлам oracle в .so к вашему ld.so.conf и запустить ldd или настроить ваши Env-переменные - но это дастошибка, отличная от той, которую вы опишите, если пропустите ее.

HTH

C.

...