настройка php с оракулом, использующим tns на mac os x - PullRequest
2 голосов
/ 02 июня 2011

Я новичок в php, но у меня он работает (php 5.3.3) на моем Mac (OS 10.6). Однако, когда я пытаюсь запустить этот скрипт:

    <?php // Create connection to Oracle
$conn = oci_connect("user", "pass", "tnsnames.ora");
if (!$conn) {
   $m = oci_error();
   echo $m['message'], "\n";
   exit;
}
else {
   print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?>

Я получаю сообщение об ошибке: «Неустранимая ошибка: вызов неопределенной функции oci_connect () ...»

Теперь я проверил сайт оракула и загрузил их мгновенный клиент, но я застрял в том, что делать дальше. Их инструкции:

На платформах, отличных от Windows, пересоберите PHP используя следующую конфигурацию опция: --with-OCI8 = общий, instantclient, / путь / к / мгновенному / клиенту / ЛИЭС Отредактируйте файл php.ini и добавьте: extension = oci8.so Убедитесь, что ваш параметр extension_dir (в php.ini) указывает на место, где oci8.so был установлен. Установить среду переменные, необходимые для Oracle, такие как PATH (Windows) или LD_LIBRARY_PATH (включено Linux) Перезагрузите веб-сервер.

Но кто-нибудь может мне это объяснить более простым языком? Я действительно смущен. Я не могу найти файл oci8.so в папке мгновенного клиента, и я не знаю, где поместить в файл extention = oci8.so (все, что у меня есть, это php.ini-production и php.ini-development И я не знаю, как «перестроить» PHP с помощью параметров конфигурации.

Да, и я тоже не знаю, как получить файл tnsnames.org. Это правильный путь? Поскольку у меня даже нет соединения, я не знаю, сбой это или нет.

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Вам не нужно имя файла "tnsnames.ora" в вашем вызове oci_connect. Вам нужно имя псевдонима соединения с базой данных в файле tnsnames.ora . Файл tnsnames.ora содержит список известных подключений к базе данных, идентифицированных псевдонимами. Для псевдонима базы данных с именем "db_alias" вы должны использовать этот вызов:

$conn = oci_connect("user", "pass", "db_alias");

Типичная запись в tnsnames.ora будет выглядеть примерно так:

DB_NAME =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = foo.bar.com)(PORT = 1521))
    (CONNECT_DATA = (SERVICE = some_db_service_name))
  )

В качестве альтернативы вы можете использовать строку Easy Connect:

$conn = oci_connect("user", "pass", "//host:port/db_service_name");

Где host, port и db_service_name должны быть заменены значениями из вашей среды. Итак, для хоста "foo" с "bar" базы данных на стандартном порту 1521 ваше соединение будет выглядеть так:

$conn = oci_connect("user", "pass", "//foo:1521/bar");

Для получения дополнительной информации см. Справочную страницу для oci_connect .

0 голосов
/ 02 июня 2011

Я делаю это с полной строкой подключения:

$rnum=rand(0,99999999);
$connect_str = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = $dbserver) (PORT = $dbport) (HASH = '.$rnum.') ) (CONNECT_DATA =(SID = $dbname)) )";
$DB = oci_connect($dbuser, $dbpass, $connect_str);

Работает для меня как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...