Oracle і PHP – це дуже просто

Введення


СУБД Oracle, коли проти бажання фірми-виробника, а коли згідно – в залежності від напрямку політичних вітрів у конкретні періоди часу, – ніколи, крім початкового періоду свого існування, не була повністю закритою системою. Наприклад, з моменту виникнення руху вільного ПЗ, розробки, що ведуться відкритим чином ("відкритими текстами"), весь час тримали цю СУБД в зоні своїх інтересів. Коли деякі представники такого ПЗ стали досить зрілими, фірма Oracle, подібно іншим великим фірмам, "легалізувала" зв'язок своєї СУБД з ними: ОС Linux входить до числа стратегічних платформ для Oracle, web-сервер Apache входить до складу штатної поставки; там же можна виявити сліди Perl та Tcl, які знайшли собі місце у внутрішніх процесах установки (OUI) і адміністрування (OEM). Ці кошти допомагають організувати взаємодію з Oracle замість коштів власної розробки (наприклад, Developer) або на додаток до них.


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 можна завантажити з сайту. Там же є документація, навчальні матеріали, форуми та посилання на ресурси, в числі яких є російськомовні. Наприклад, для Windows можна завантажити файл php-4.3.6-Win32.zip. Його потрібно помістити в каталог, наприклад c: php, і розпакувати. Далі можна слідувати інструкціям в install.txt, проте власне ПЗ PHP вже встановлено. У Unix ще потрібно побудувати бібліотеки програмою make.


Редагування файлу конфігурації PHP


Знайдіть файл php.ini. Швидше за все він в каталозі c: WINNT. Знайдіть параметр extension_dir і проставте


extension_dir = “C:phpphp-4.3.6-Win32sapi”


Зніміть коментарі з рядків


;extension=php_oci8.dll
;extension=php_oracle.dll
;extension=php_dbase.dll


Останній параметр потрібно раскомментаріть тільки якщо ви маєте намір програти наступна далі приклад із записом даних у форматі dbf.


Редагування файлу конфігурації Apache


Знайдіть файл httpd.conf. Швидше за все він у каталозі% ORACLE_HOME% ApacheApacheconf. Додайте рядки:


LoadModule php4_module C: / php/php-4.3.6-Win32/sapi/php4apache.dll
AddModule mod_php4.c
AddType application/x-httpd-php .php


Останній параметр вже є у вигляді коментаря, і для нього досить просто знак коментаря зняти.


Копіювання файлів динамічних модулів


Відповідно до зазначеного в php.ini значенням параметра extension_dir скопіюємо файли:


c:
cd phpphp-4.3.0-Win32
move php4ts.dll sapi
move extensionsphp_oci8.dll sapi
move extensionsphp_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% ApacheApachehtdocs. Наберемо у браузері адресу (у версії Oracle 8 номер порту або прибрати, або вказати 80).


Деякі можливості PHP


PHP, звичайно, не настільки універсальна мова, як 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 і багато іншого. Ось кілька прикладів функцій, навскидку:



Подивимося, як може виконуватися звернення до даних в 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. Це дозволяє організувати в додатку змістовний діалог, підключивши засоби введення форм 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 і звернемося за адресою. У SQL * Plus або попередньої сторінкою PHP можна перевірити результат. Зверніть увагу на те, що в наведеному прикладі ніяк не обробляється (а) блокування рядків, можливо заважає вставці і (б) можливий конфлікт первинного ключа.


Oracle, та не тільки


Як говорилося вище, PHP має функції звернення до даних аж ніяк не тільки в Oracle. Наявність цих функцій дає можливим використання цього інструменту досить екзотично, наприклад, для перенесення даних між Oracle і іншими системами. Наприклад, нерідко стоїть завдання перенесення з формату dbf в БД під управлінням Oracle або навпаки. Ось як її можна вирішити "на коліні". Зверніть увагу, що перенесення ініціюється з віконця браузера, а виконується цілком на вузлі web.


Складемо файл dbase.php:







<html>
<Head> <title> Access from php to different data 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 і звернемося за адресою. У каталозі з: повинен з'явитися файл fromoracle.dbf з даними, отриманими з Oracle. Зворотне перетворення можна виконати як вправа.


Таким же чином можна звертатися до mySQL , PostgreSQL, Sybase, SQL Server та інших систем управління даними і по ODBC.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*