У меня Oracle Express 11g установлен на Slackware Linux и работает. Я могу подключиться к нему и выполнить запросы.
У меня установлены apache и php и установлен oci8.
phpinfo () показывает oci8 загружен и включен.
Для следующего простого сценария php веб-страница отображает:
<?php echo "Hello World!!!"; ?>
Так что PHP в Apache работает.
Теперь для следующего простого подключения к оракулу и показать версию:
<html>
<body>
Oracle Version <br/>
<?php
$conn = oci_connect('SYSTEM', 'password', 'localhost/XE');
$stid = oci_parse($conn, 'select banner from v$version');
oci_execute($stid);
echo "<table>\n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
echo "<tr>\n";
foreach ($row as $item) {
echo " <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : " ")."</td>\n";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
</body>
</html>
Это показывает следующее из источника просмотра в веб-браузере:
<html>
<body>
Oracle Version <br/>
<table>
</table>
</body>
</html>
Однако когда я запускаю скрипт с / usr / bin / php oratest.php, он выводит следующее правильно:
<html>
<body>
Oracle Version <br/>
<table>
<tr>
<td>Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production</td>
</tr>
<tr>
<td>PL/SQL Release 11.2.0.2.0 - Production</td>
</tr>
<tr>
<td>CORE 11.2.0.2.0 Production</td>
</tr>
<tr>
<td>TNS for Linux: Version 11.2.0.2.0 - Production</td>
</tr>
<tr>
<td>NLSRTL Version 11.2.0.2.0 - Production</td>
</tr>
</table>
</body>
</html>
Как это возможно. Почему php командной строки работает и apache, обслуживающий тот же самый скрипт php, не работает. И phpinfo (), обслуживаемый тем же apache, показывает, что oci8 установлен и включен.
Пожалуйста, помогите, если у вас есть идеи, спасибо заранее.
Ошибки происходили из-за неправильной установки ORACLE_HOME и LD_LIBRARY_PATH для путей установки клиента oracle и клиента oracle express 11g и т. Д.
Я использовал php-директиву putenv () при запуске php-кода, и она работала без ошибок.
putenv("ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe");
putenv("LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/xe/lib:/usr/lib64/oracle/12.1/client64/lib");
Других решений пока нет …