Я пытаюсь настроить сервер для проекта в моем классе баз данных. Я буду писать проект в php, развертывать его через apache и подключаться к удаленному серверу oracle. У меня проблемы с порцией соединения оракула. У меня есть модуль OCI8, установленный с мгновенным клиентом oracle версии 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) : " ") . "</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 Version 5.2.10-2ubuntu6.4). Они используют разные файлы php.ini (/etc/php5/apache2/php.ini и /etc/php5/cli/php.ini), но оба они точно такие же. Я не знаю, где еще искать что-то, что может быть другим в одной среде по сравнению с другой.
Спасибо за любую помощь!
PHP должен знать, где загрузить его расширение (это мосты между PHP и поставляемыми Oracle библиотеками). Поскольку он работает с CLI, похоже, у вас установлен пакет.
Если файлы ini совпадают, вам также необходимо проверить:
1) вы не забыли перезапустить apache после настройки oracle libs?
2) ваш веб-сервер работает как chroot?
3) какие разрешения для расширения oci8? (т. е. он читается с помощью веб-сервера uid)
Вам также нужно добавить путь к файлам oracle .so на ваш ld.so.conf и запустить ldd или настроить ваши Env vars – но это даст другую ошибку тому, что вы описали, если вы пропустите его.
НТН
C.
У вас есть расширение 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 . Дайте мне знать, если это вам поможет.
Это может быть много чего, модуль OCI8 установлен неправильно, не загружен apache или даже зависимость не установлена.
Самый простой способ установить OCI8 – использовать pecl:
pecl install oci8-2.0.12 # for PHP 5.5/6
Затем вам нужно загрузить его, разместив extension=oci8.so
в своем php.ini
.
Теперь убедитесь, что в вашей конфигурации extension_dir
oci8.so
файл oci8.so
Это можно найти в phpinfo или выполнить php -i | grep extension_dir
php -i | grep extension_dir
. Например, у меня есть /usr/lib/php/20131226
.
Перезапустите Apache, выполнив apachectl restart
и oci8
есть oci8
в вашей phpinfo конфигурация oci8.
Если вы все пробовали, и это не сработало (что уже случилось со мной), убедитесь, что libaio1
установлен в вашей системе. Если это не так, установите его, выполнив apt install libaio1
и перезагрузив apache. В моем случае это трюк. Надеюсь, это поможет.