Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Oracle и PHP - это очень просто

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13870
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Фев 12, 2007 2:29 pm    Заголовок сообщения: Oracle и PHP - это очень просто
Ответить с цитатой

Oracle и PHP - это очень просто

Владимир Пржиялковский , преподаватель технологий Oracle

... Он бежит себе в волнах
На раздутых парусах.


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.dll
AddModule 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).
Некоторые возможности 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 и многое другое. Вот несколько примеров функций, на вскидку:

- 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 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 и обратимся по адресу http://localhost:7778/dbase.php. В каталоге с: должен появиться файл fromoracle.dbf с данными, полученными из Oracle. Обратное преобразование можно проделать в качестве упражнения.

Таким же образом можно обращаться к mySQL, PostgreSQL, Sybase, SQL Server и другим системам управления данными и по ODBC.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение dhsilabs@jabber.ru
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис