[an error occurred while processing this directive] [an error occurred while processing this directive]
[an error occurred while processing this directive]
Свободные мысли о свободном софте
[an error occurred while processing this directive]
Logo CitForum CITForum на CD Форумы Газета Море(!) аналитической информации!
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
[an error occurred while processing this directive] [an error occurred while processing this directive]
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

18.08.2019

Google
WWW CITForum.ru
[an error occurred while processing this directive]

Новости мира IT:

Архив новостей

[an error occurred while processing this directive] [an error occurred while processing this directive]
[an error occurred while processing this directive]
Пятнадцатая техническая конференция «Корпоративные базы данных-2010»
Москва, 22–23 апреля
С Новым годом!

Генеральный спонсор
Техническая конференция
Корпоративные базы данных – 2008
Москва, 24–25 апреля
При поддержке РФФИ

Спонсор
[an error occurred while processing this directive] [an error occurred while processing this directive]
На правах рекламы

2004 г.

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.

[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] [an error occurred while processing this directive]

Планирование сроков проекта и вопросы осуществления лидерством проекта рассматриваются на сайте по управлению проектами.

[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Размещение рекламы — тел. +7 495 6608306, ICQ 232284597

[an error occurred while processing this directive] [an error occurred while processing this directive]
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Редакция рекомендует:

Последние комментарии:

Что мы знаем об iPhone 4G? (7)
16 июля, 20:25

Подписка на новости CITForum.ru

Новые публикации:

7 июля

  • Управление параллелизмом с низкими накладными расходами для разделенных баз данных в основной памяти

  • Рекурсивные запросы в Oracle

  • Жесткий диск WD10EARS с сектором 4 КБ. Подготовка к эксплуатации в Linux.

    Обзоры журнала Computer:

    Газета:

  • Московские пробки - исследование IBM

  • От Osborne до iPad: эволюция портативных компьютеров

    19 мая

  • Прозрачный механизм удаленного обслуживания системных вызовов

  • Система моделирования Grid: реализация и возможности применения

    Газета:

    Майкл Стоунбрейкер:

  • Ошибки в системах баз данных, согласованность "в конечном счете" и теорема CAP

  • Дискуссия по поводу "NoSQL" не имеет никакого отношения к SQL

    29 апреля

  • Материалы конференции "Корпоративные Базы Данных-2010"

  • Разные облики технологии баз данных (отчет о конференции)

    14 апреля

  • MapReduce: внутри, снаружи или сбоку от параллельных СУБД?

  • Научные вызовы технологиям СУБД

    Обзоры журнала Computer:

    31 марта

  • Рационализация согласованности в "облаках": не платите за то, что вам не требуется

  • Взаимные блокировки в Oracle

  • Архитектура среды тестирования на основе моделей, построенная на базе компонентных технологий

  • Объектное представление XML-документов

    Газета:

  • Microsoft для российских разработчиков: практика с элементами фундаментальности

    10 марта

  • HadoopDB: архитектурный гибрид технологий MapReduce и СУБД для аналитических рабочих нагрузок

  • Классификация OLAP-систем вида xOLAP

  • BGP. Три внешних канала. Балансировка исходящего и входящего трафиков

    Газета:

  • Что мы знаем об iPhone 4G?

    17 февраля

  • MapReduce и параллельные СУБД: друзья или враги?

  • Объектно-ориентированное программирование в ограничениях: новый подход на основе декларативных языков моделирования данных

  • Системологический подход к декомпозиции в объектно-ориентированном анализе и проектировании программного обеспечения

    Газета:

  • Эволюция Wine

    3 февраля

  • Дом на песке

  • Реальное переосмысление "формальных методов"

  • Интервью с Найджелом Пендзом

    Газета:

  • iPad. Первый взгляд на долгожданный планшет от Apple

  • Я не верю в iPad [an error occurred while processing this directive]

    20 января

  • SQL/MapReduce: практический подход к поддержке самоописываемых, полиморфных и параллелизуемых функций, определяемых пользователями

  • Данные на лету: как технология потокового SQL помогает преодолеть кризис

    Обзоры журнала Computer:

    2 декабря

  • Сергей Кузнецов. Год эпохи перемен в технологии баз данных

    18 ноября

  • Генерация тестовых программ для подсистемы управления памятью микропроцессора

  • Сравнительный анализ современных технологий разработки тестов для моделей аппаратного обеспечения

    Все публикации >>>


    [an error occurred while processing this directive]
  • [an error occurred while processing this directive] [an error occurred while processing this directive]
    Купить сотовые телефоны в М.Видео
    Отличные цены на сотовые телефоны. Бесплатная доставка. Заказ в интернет-магазине и по телефону (495) 644-28-51
    www.mvideo.ru [an error occurred while processing this directive]

    Регистрация доменов в зонах .ru, .com, .net. Компания Rusonyx.

    IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    [an error occurred while processing this directive]
    Информация для рекламодателей PR-акции, размещение рекламы — тел. +7 495 6608306, ICQ 232284597 Пресс-релизы — pr@citforum.ru
    Послать комментарий
    Информация для авторов

    Редакция раздаёт котят!

    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2009 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...
    [an error occurred while processing this directive]


    [an error occurred while processing this directive] [an error occurred while processing this directive] реклама:
    Производство и продажа серверов | забронировать гостиницу Санкт Петербурга | платный хостинг | IBM Rational. Аналитика и инструменты
    [an error occurred while processing this directive] [an error occurred while processing this directive]