Новые книги

Наше знание о медиа пиратстве обычно начинается и часто заканчивается исследованием, финансируемым отраслью. Для этого есть весомые основания.

Американские ассоциации отраслей программного обеспечения, фильмов и музыки финансировали обширные усилия по глобальному исследованию пиратства за прошлые два десятилетия, по большей части, для себя. Пиратство, несмотря на его вездесущность, было непаханым полем для независимого исследования. Эмпирические работы за прошлые десять лет, исключая отчасти исследования совместного использования файлов (файлшеринга), были редки и сосредоточены в узких областях. Сообщество интересов было столь мало, что, когда мы начали планировать этот проект в 2006, значительная его часть была включена в нашу работу. Это сообщество росло, но все еще остается ничем по масштабу сопоставлений относительно глобального, сравнительного, постоянного внимания отраслевых групп. И возможно, что еще более важно, нет ничего сопоставимого жесткой интеграции отраслевых исследований с лоббированием и кампаниями в СМИ, которые усиливают его присутствие в публичных и политических дискуссиях.

#i_001.png
В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.

Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Функции Oracle 8

Учебник РНР
Назад Вперёд

LXX. Функции Oracle 8

Эти функции дают возможность доступа к БД Oracle8 и Oracle7. Используется интерфейс Oracle8 Call-Interface (OCI8). Для использования этого расширения вам понадобятся клиентские библиотеки Oracle8.

Это расширение более гибко, чем стандартное расширение Oracle. Оно поддерживает связку глобальных и локальных переменных PHP с заглушками Oracle, имеет полную поддержку LOB, FILE и ROWID и позволяет использовать предоставленные пользователем определённые переменные.

Прежде чем использовать это расширение, убедитесь, что вы соответствующим образом настроили ваши переменные окружения oracle для пользователя Oracle, а также для пользователя вашего web-демона. Вот переменные, которые вам может понадобиться установить:

  • ORACLE_HOME

  • ORACLE_SID

  • LD_PRELOAD

  • LD_LIBRARY_PATH

  • NLS_LANG

  • ORA_NLS33

После настройки переменных окружения для пользователя вашего web-сервера не забудьте также добавить пользователя web-сервера (nobody, www) в группу oracle.

Если ваш web-сервер не стартует или заваливается при старте: убедитесь, что Apache связан с библиотекой pthread:

# ldd /www/apache/bin/httpd 
    libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000)
    libm.so.6 => /lib/libm.so.6 (0x4002f000)
    libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000)
    libdl.so.2 => /lib/libdl.so.2 (0x4007a000)
    libc.so.6 => /lib/libc.so.6 (0x4007e000)
    /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Если libpthread нет в списке, нужно переустановить Apache:

# cd /usr/src/apache_1.3.xx
# make clean
# LIBS=-lpthread config.status
# make
# make install
Пример 1. Подсказки по OCI
<?php
// от [email protected]

// Используйте опцию: OCI_DEFAULT для выполнения команды задержки выполнения
OCIExecute($stmt, OCI_DEFAULT);

// для запроса использования данных (после извлечения):

$result = OCIResult($stmt, $n);
if (is_object ($result)) $result = $result->load();

// Для использования операторов INSERT или UPDATE:

$sql = "insert into table (field1, field2) values (field1 = 'value',
 field2 = empty_clob()) returning field2 into :field2";
OCIParse($conn, $sql);
$clob = OCINewDescriptor($conn, OCI_D_LOB);
OCIBindByName ($stmt, ":field2", &$clob, -1, OCI_B_CLOB);
OCIExecute($stmt, OCI_DEFAULT);
$clob->save ("some text");
OCICommit($conn);

?>

Вы легко можете получить доступ к хранимым процедурам тем же способом, что и из командной строки.

Пример 2. Использование хранимых процедур
<?php
// от [email protected]
$sth = OCIParse ( $dbh, "begin sp_newaddress( :address_id, '$firstname',
 '$lastname', '$company', '$address1', '$address2', '$city', '$state',
 '$postalcode', '$country', :error_code );end;" );

// Это вызывает хранимую процедуру sp_newaddress с :address_id в
// in/out-переменной и :error_code в out-переменной.
// Затем вы выполняете связывание:

   OCIBindByName ( $sth, ":address_id", $addr_id, 10 );
   OCIBindByName ( $sth, ":error_code", $errorcode, 10 );
   OCIExecute ( $sth );

?>
Содержание
OCIBindByName - связывает PHP-переменную с заглушкой Oracle
OCICancel - отменяет чтение из курсора
OCICollAppend -
OCICollAssign -
OCICollAssignElem -
OCICollGetElem -
OCICollMax -
OCICollSize -
OCICollTrim -
OCIColumnIsNULL - тестирует, является ли результирующий столбец NULL
OCIColumnName - возвращает имя столбца
OCIColumnPrecision -
OCIColumnScale -
OCIColumnSize - возвращает размер результирующего столбца
OCIColumnType - возвращает тип данных столбца
OCIColumnTypeRaw -
OCICommit - подтверждает внешние транзакции
OCIDefineByName - использует PHP-переменную для шага define в операторе SELECT
OCIError - возвращает последнюю ошибку из stmt|conn|global
OCIExecute - выполняет оператор
OCIFetch - извлекает следующий ряд в result-буфер
OCIFetchInto - извлекает следующий ряд в result-массив
OCIFetchStatement - извлекает все ряды результирующих данных в массив
OCIFreeCollection -
OCIFreeCursor - освобождает все ресурсы, ассоциированные с курсором
OCIFreeDesc - удаляет дескриптор большого объекта/large object
OCIFreeStatement - освобождает все ресурсы, ассоциированные с оператором
OCIInternalDebug - включает или отключает вывод внутренней отладки
OCILoadLob -
OCILogOff - отсоединяет от Oracle
OCILogon - устанавливает соединение с Oracle
OCINewCollection -
OCINewCursor - возвращает новый курсор (Statement-Handle/оператор-дескриптор)
OCINewDescriptor - инициализирует новый пустой дескриптор LOB или FILE
OCINLogon - устанавливает новое соединение с Oracle
OCINumCols - возвращает количество результирующих столбцов в операторе
OCIParse - разбирает запрос/query и возвращает оператор
OCIPLogon - соединяется с БД Oracle с использованием постоянного соединения
OCIResult - возвращает значение столбца для извлечённого ряда
OCIRollback - откатывает неразрешённые транзакции
OCIRowCount - получает количество задействованных рядов
OCISaveLob -
OCISaveLobFile -
OCIServerVersion - возвращает строку, содержащую информацию о версии сервера
OCISetPrefetch - устанавливает количество предварительно извлечённых рядов
OCIStatementType - возвращает тип OCI-оператора
OCIWriteLobToFile -

НазадОглавление Вперёд
odbc_tablesВверх OCIBindByName