| 
 Oracle и PHP - это очень простоPHP - простое в употреблении, легкое и бесплатное 
      средство для динамического построения страниц HTML на сервере, перед 
      передачей клиенту в браузер.  PHP умеет обращаться в СУБД Oracle, и 
      это делает его хорошим кандидатом для разработки приложений web на основе 
      Oracle малой и средней сложности. Введение СУБД Oracle, когда против желания фирмы-изготовителя, а 
      когда согласно - в зависимости от направления политических ветров в 
      конкретные периоды времени, - никогда, кроме начального периода своего 
      существования, не была полностью закрытой системой.  Например, с 
      момента возникновения движения свободного ПО, разработки, ведущиеся 
      открытым образом (<открытыми текстами>), все время держали эту СУБД в зоне 
      своих интересов.  Когда некоторые представители такого ПО стали 
      достаточно зрелыми, фирма Oracle, подобно другим крупным фирмам, 
      <легализовала> связь своей СУБД с ними:  ОС Linux входит в число 
      стратегических платформ для Oracle, web-сервер Apache входит в состав 
      штатной поставки; там же можно обнаружить следы Perl и Tcl, нашедших себе 
      место во внутреннх процессах установки (OUI) и администрирования 
      (OEM).  Эти средства помогают организовать взаимодействие с Oracle 
      вместо средств собственной разработки (например, Developer) или в 
      дополнение к ним. PHP принадлежит к числу средств открытого ПО, не самых 
      популярных, но вполне состоявшихся, востребованность которых непрерывно 
      растет (см. http://www.php.net/usage.php).  PHP позволяет 
      динамически формировать страницы HTML на сервере web.  В этом 
      качестве он занимает нишу, общую с EmbPerl, Mason, Aquaruim (все - 
      свободное ПО) и сервлетами (например, с JavaServer Pages).  Сервером 
      web может быть Apache, IIS или же еще несколько разновидностей.  
      Здесь нам важно, что PHP умеет обращаться к СУБД Oracle и что это легкая и 
      простая система. Установка PHPДальнейшие примеры будут приведены для связки Windows + 
      Apache.  Удобнее всего использовать версию Apache со штатного 
      установочного комплекта СУБД Oracle (в версии Oracle 10.1 - на Companion 
      CD).  Дежурное напоминание:  для промыщленного использования 
      сервера web лучше все же взять последнюю версию Apache из сети, так как 
      она более функциональна, надежна и защищена. Версию PHP можно скачать с узла http://www.php.net/.  
      Там же имеются документация, учебные материалы, форумы и ссылки на 
      ресурсы, в числе которых есть русскоязычные.  К примеру, для Windows 
      можно скачать файл php-4.3.6-Win32.zip.  Его нужно поместить в 
      каталог, например c:\php, и разархивировать.  Далее можно следовать 
      инструкциям в install.txt, однако само ПО PHP уже установлено.  В 
      Unix еще потребуется построить библиотеки программой make. Правка файла конфигурации PHPНайдите файл php.ini.  Скорее всего он в каталоге 
      c:\WINNT.  Найдите параметр extension_dir и проставьте extension_dir = "C:\php\php-4.3.6-Win32\sapi" Снимите комментарии со строк ;extension=php_oci8.dll;extension=php_oracle.dll
 ;extension=php_dbase.dll
 Последний параметр требуется раскомментарить только если 
      вы намерены проиграть следующий далее пример с записью данных в формате 
      dbf. Правка файла конфигурации ApacheНайдите файл httpd.conf.  Скорее всего он в каталоге 
      %ORACLE_HOME%\Apache\Apache\conf.  Добавьте строки: LoadModule php4_module 
      C:/php/php-4.3.6-Win32/sapi/php4apache.dllAddModule 
      mod_php4.c
 AddType application/x-httpd-php .php
 Последний параметр уже присутствует в виде комментария, и для него 
      достаточно просто знак комментария снять. Копирование файлов динамических модулейВ соответствии с указанным  в php.ini значением параметра 
      extension_dir скопируем файлы: c:cd \php\php-4.3.0-Win32
 move php4ts.dll sapi
 move 
      extensions\php_oci8.dll sapi
 move extensions\php_oracle.dll sapi
 Перезапуск Apache и проверкаОсталось перезапустить Apache.  Это можно сделать либо с помощью 
      меню Start, либо через останов и запуск службы Windows.  Если все 
      проделано правильно, при запуске не будет ошибок. Составим файл test.php: <html><head><title>My test for 
      php</title></head>
 <body>
 <h3>This is a test 
      how php works</h3>
 <?php phpinfo()?> <?php$currtime = time ();
 $currtimestr = strftime 
      ("%H:%M:%S", $currtime);
 echo "The current time is: 
      $currtimestr";
 ?>
 </body></html>
 Поместим файл в %ORACLE_HOME%\Apache\Apache\htdocs.  Наберем в 
      браузере адрес http://localhost:7778/test.php (в версии Oracle 8 номер 
      порта или убрать, или указать 80). Некоторые возможности PHPPHP, конечно, не столь универсальный язык, как Java, используемая в 
      JavaServer Pages, но достаточно богат.  Описание его можно найти в 
      книгах, например в http://www.ccas.ru/~prz/ORA/phppr.html, или на 
      вышеуказанной официальной странице PHP в интернете.  Вот некоторые 
      особенности языка. Вставки PHP в текст HTML можно оформлять не только как <?php ... 
      ?> (см. выше), но и проще как <? ... ?> (что не рекомендуется) 
      или же как <script language="php"> ... </script> (что 
      длиннее). phpinfo() в примере выше - встроенная функция PHP.  Регистр, 
      которым набираются имена функций в PHP несущественен, а для переменных 
      (предваряются знаком $, $currtime и $currtimestr в примере выше) наоборот, 
      существенен. Переменные могут быть типов целого, плавающего, строка, массив, объект 
      и булевского.  Возможно явное преобразование типов.  Выражения и 
      операторы похожи на используемые в C и Perl.   Набор функций достаточно широк и позволяет производить вычисления (в 
      том числе с произвольной точностью), обращаться к файлам ОС и к различным 
      базам данных, к сетевым ресурсам (например, по ftp) и к серверам LDAP, 
      рисовать изображения и динамически выводить данные в формате pdf и многое 
      другое.  Вот несколько примеров функций, на вскидку: - string crypt(string str, [, string salt]) - шифрование строки по 
      алгоритму DES, наприме перед помещением ее в БД (для шифрования разными 
      методами есть и другие функции)- int syslog(int priority, string 
      message) - посылка сообщения в журнал ОС
 - int xml_parse(int 
      parser, string data[, int is_final]) - синтаксический разбор документа 
      XML
 Посмотрим, как может выполняться обращение к данным в Oracle. Работа с OracleОбращение с помощью PHP к данным в Oracle может осуществляться через 
      CGI или через специальные функции.  Первая возможность рискована с 
      точки зрения безопасности и здесь не рассматривается. Вторая, в свою очередь, реализуется двумя имеющимися 
      библиотеками:  php_oracle и php_oci8, из которых вторая считается 
      более эффективной.  Продемонстрировать ту и другую можно на примере 
      файла employees.php: <html>
<head><title>Access to Oracle from php</title></head>
<body>
<h3>The two types of Access to Oracle from php:</h3>
<?php
if ($c = OCILogon("scott", "tiger", "orcl")) {
  $s = OCIParse($c, "select ename, sal from emp");
  OCIExecute($s, OCI_DEFAULT);
  while (OCIFetch($s)) {
    echo "ename = " . ociresult($s, "ENAME") .
         ", sal = " . ociresult($s, "SAL") . "<br/>";
  }
  OCILogoff($c);
} else {
  $err = OCIError(); echo "Oracle Connect Error " . $err[text];
}
?>
<hr/>
<?php
if ($c = ora_logon("scott@orcl","tiger")) {
  $curs = ora_do($c, "SELECT ename, sal FROM emp");
  while (ora_fetch($curs)) {
    echo "ename = " . ora_getcolumn($curs, 0) .
         ", sal = " . ora_getcolumn($curs, 1) . "<br/>";
  }
  ora_logoff($c);
} else {
  echo "Oracle Connect Error " . ora_error();
}
?>
<hr/>
</body>
</html>
Снова поместим файл в htdocs и обратимся по адресу http://localhost:7778/employees.php.  Этот пример для наглядности упрощен, а в жизни нужно 
      будет больше уделить места обработке ошибок и структуризации кода.  
       Вот пример вставки записи в БД.  Данные передаются 
      через строку запроса HTTP.  Это позволяет организовать в приложении 
      содержательный диалог, подключив средства ввода форм HTML. Подготовим файл insert.php: <html>
<head><title>Access to Oracle from php</title></head>
<body>
<h3>INSERT example:</h3>
<?php
if ($c = OCILogon("scott", "tiger", "orcl")) {
  $name = (string)$_REQUEST['empname'];
  $no = (int)$_REQUEST['empno'];
  $query = "INSERT INTO emp (ename, empno)VALUES (:bind1, :bind2)";
  $s = OCIParse($c, $query);
  OCIBindByName($s, ":bind1", $name);
  OCIBindByName($s, ":bind2", $no);
  OCIExecute($s, OCI_DEFAULT);
  OCICommit($c);
  OCILogoff($c);
} 
?>
Done.
<hr/>
</body>
</html>
Поместим файл в htdocs и обратимся по адресу http://localhost:7778/insert.php?empname=Вася&empno=1111.  
      В SQL*Plus или предыдущей страницей PHP можно проверить результат.  
      Обратите внимание на то, что в приведенном примере никак не обрабатывается 
      (а) блокировка строк, возможно мешающая вставке и (б) возможный конфликт 
      первичного ключа. Oracle, да не толькоКак говорилось выше, PHP имеет функции обращения к данным 
      отнюдь не только в Oracle.  Наличие этих функций дает возможным 
      использования этого инструмента достаточно экзотично, например для 
      переноса данных между Oracle и другими системами.  Например, нередко 
      стоит задача переноса из формата dbf в БД под управлением Oracle или 
      наоборот.  Вот как ее можно решить <на коленке>.  Обратите 
      внимание, что перенос инициируется из окошка браузера, а выполняется 
      целиком на узле web. Составим файл dbase.php:  <html>
<head><title>Access from php to differentdata bases</title></head>
<body>
<h3>Distant data transfer from
 Oracle to dbf:</h3>
<?php
$dbname = "c:/fromoracle.dbf";
$def =
    array(
     array("ename", "C", 10),
     array("sal", "N", 7, 2)
    );
$dbid = dbase_create($dbname, $def);
if (!$dbid) echo "Failed to open dbf."
?>
<?php
if ($c=OCILogon("scott", "tiger", "orcl")) {
  $s = OCIParse($c, "select ename,
 sal from emp");
  OCIExecute($s, OCI_DEFAULT);
  while (OCIFetch($s)) {
    $rec[1] = ociresult($s, "ENAME");
    $rec[2] = ociresult($s, "SAL");
    if (!dbase_add_record($dbid,
 array($rec[1],$rec[2]))) 
       echo "Failed to add a record. ";
  }
  OCILogoff($c);
}
?>
Done.
<hr/>
</body>
</html>
 Поместим файл в htdocs и обратимся по адресу http://localhost:7778/dbase.php.  В каталоге с: 
      должен появиться файл fromoracle.dbf с данными, полученными из 
      Oracle.  Обратное преобразование можно проделать в качестве 
      упражнения. Таким же образом можно обращаться к mySQL, PostgreSQL, 
      Sybase, SQL Server и другим системам управления данными и по ODBC. Автор: Владимир ПржиялковскийИсточник: www.citforum.ru
 |