Доброго всем времени суток.Проблема такая: ставлю Apache, потом PHP c клиентом Оракла. При попытке через броузер открыть файл *.php Арасhе не вызывает интерпретатор ПХП для разборки этого файла, а нагло суёт его клиенту (в броузер).
Последовательность установки такая:
1. Чистая FreeBSD 6.2.
2. С ftp://ftp.freebsd.org качаю и устанавливаю следущее:
- libiconv-1.9.2_2
- libxml2-2.6.30
- oracle8-client-0.1.1_1
- perl-5.8.8
- pkg-config-0.22
- openssl-0.9.8e_1.tbz
3. С http://httpd.apache.org качаю исходники Араche 2.2.6
4. С http://www.php.net качаю исходники php-5.2.4
5. По материалам статьи http://www.opennet.me/openforum/vsluhforumID8/4334.html совершаю следующее шаманство:setenv LDFLAGS "-lpthread -L/usr/local/oracle8-client/lib -lclntst8 -lcompat -lm"
6. Компилирую Апач вот так:
./configure --enable-MODULE=shared --enable-ssl --disable-actions --disable-alias --disable-asis --disable-auth --disable-autoindex --disable-access --disable-cgid --disable-charset-lite --disable-env --disable-imagemap --disable-include --disable-log-config --disable-negotiation --disable-setenvif --disable-status --disable-userdir --enable-so
7. Компилирую ПХП вот так:
./configure --prefix=/usr/php524 --with-regex=php --disable-all --enable-libxml --with-libxml-dir=/usr/locall --with-apxs2=/usr/local/apache2/bin/apxs --disable-ipv6 --with-zlib --enable-zip --with-oci8=/usr/local/oracle8-client
При этом ещё исправляю файл
cd ext/oci8
EDIT oci8_lob.c, near line 340
add compiler commands to make text:
===================================
if (is_clob) {
#ifdef OCI_NLS_CHARSET_MAXBYTESZ
PHP_OCI_CALL_RETURN(connection->errcode,
OCINlsNumericInfoGet, (connection->env, connection->err, &bytes_per_char,
OCI_NLS_CHARSET_MAXBYTESZ));
if (connection->errcode != OCI_SUCCESS) {
php_oci_error(connection->err, connection->errcode TSRMLS_CC);
PHP_OCI_HANDLE_ERROR(connection, connection->errcode);
return 1;
}
#else
bytes_per_char = 4;
#endif
} else {
/* BLOBs don't have encoding, so bytes_per_char == 1 */
}
===================================
added lines:
#ifdef OCI_NLS_CHARSET_MAXBYTESZ
#else
bytes_per_char = 4;
#endif
===================================8. Компиляция ошибок не выдаёт, модуль libphp5.so появляется в ..../apache2/modules, в httpd.conf прописывается:
LoadModule php5_module modules/libphp5.soтуда же я прописываю ручками:
AddType application/x-httpd-php5 .php
AddType application/x-httpd-php5-source .phps
AddHandler application/x-httpd-php5 .php .php5 .php4 .php3 .phtmlDirectoryIndex insex.html index.php
9. запускаю Апач, он стартует с одним предупреждением:
[Wed Oct 24 22:55:42 2007] [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter10. При попытке открыть *.html файл всё классно, а при попытке открыть *.php - увы, только передача содержимого файла на клиента.
Конфигурация Апача:
# /usr/local/apache2/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_filter.c
mod_ssl.c
prefork.c
http_core.c
mod_mime.c
mod_cgi.c
mod_dir.c
mod_so.cПри попытке поставить Апач из портов - ситуация такая же (пытался ещё 2.0.61 поставить).
Вопросы такие:
1. Если кто сталкивался с такой проблемой (апач вместо парсинга пхп-файла передаёт его на клиента) - напишите плииииз...
2. Если кто знает, как вкомпилить ПХП 5 в Апач 2.2.6 статически напишите пожалуйста.
RTFM читал, ответов не нашёл....
>Вопросы такие:
>1. Если кто сталкивался с такой проблемой (апач вместо парсинга пхп-файла передаёт
>его на клиента) - напишите плииииз...
>2. Если кто знает, как вкомпилить ПХП 5 в Апач 2.2.6 статически
>напишите пожалуйста.
>RTFM читал, ответов не нашёл....Все четко и грамотно написано. Respect.
Хочу помочь - не знаю как :)
Мои идеи: СМ.
1. /var/log/httpd/...
2. php.ini
3. httpd.conf : AddModule mod_php5.c
4. про oracle забыть пока не начнет работать php
А вы уверены что вам нужен AddHandler? Обычно нужен только AddType application/x-httpd-php5 .php, плюс не обязательно что будет именно application/x-httpd-php5, может и просто application/x-httpd-php быть
Спасибо большое за советы, PHP запустился, помогло следующее:1. в httpd.conf прописал:
LoadModule php5_module modules/libphp5.soAddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phpsDirectoryIndex insex.html index.php
(на AddModule mod_php5.c Апач ругался неприлично)
2. создал такую переменную (путь к ini файлу для PHP)
setenv PHPRC=/usr/php524/lib/Теперь ПХПшные файлы правильно парсятся на сервере. В частности отрабатывает phpinfo()
Возникла проблема с подключением к Ораклу:
1. в файл tnsnames.ora внёс новую запись:
elt =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ora10)
)
)2. Установил переменные окружения:
setenv ORACLE_HOME /usr/local/oracle8-client
setenv LD_LIBRARY_PATH $ORACLE_HOME/lib
setenv NLS_LANG american_america.cl8iso8859p53. Создал файл ora_test.php следующего содержания:
<?php
print '1111111111111111111111111111111111';$conn = OCILogon("<user>", "<password>", "elt");
print '2222222222222222222222222222222222';
?>4. На фаерволе открыл порт 1521 для входа и выхода. (потом даже вообще снял фаервол)
5. phpinfo() касательно Ораклового клиента выдаёт следующее:
oci8
OCI8 Support enabled
Version 1.2.3
Revision $Revision: 1.269.2.16.2.37 $
Active Persistent Connections 0
Active Connections 0
Oracle Version 8.1
Compile-time ORACLE_HOME /usr/local/oracle8-client
Libraries Used no value
Temporary Lob support enabled
Collections support enabledDirective Local Value Master Value
oci8.default_prefetch 10 10
oci8.max_persistent -1 -1
oci8.old_oci_close_semantics 0 0
oci8.persistent_timeout -1 -1
oci8.ping_interval 60 60
oci8.privileged_connect Off Off
oci8.statement_cache_size 20 20
Проблема:
при попытке выполнить этот файл наглухо виснет функция OCILogon.
Пользователь и пароль в БД созданы, пользователь имеет гранты на соединение, селекты и т.д. - т.е. под ним можно заходить в БД (проверено).Вопросы:
1. Может кто-то может подсказать как проверить работоспособность ораклового клиента?
2. Будет ли работать клиент 8.1 с сервером БД 10g?
3. Есть ли какие-нибудь альтернативные клиенты Оракла, кроме стандартного из портов?
4. Если ставить линуксового клиента Оракла, то потребуется ли ставить линуксолятор на FreeBSD?
>[оверквотинг удален]
> (ADDRESS_LIST =
> (ADDRESS = (PROTOCOL = TCP)(HOST =
>192.168.0.11)(PORT = 1521))
> )
> (CONNECT_DATA =
> (SID = ora10)
> )
> )
>Вопросы:
>1. Может кто-то может подсказать как проверить работоспособность ораклового клиента?sqlplus @elt
см. у клиента в bin
>2. Будет ли работать клиент 8.1 с сервером БД 10g?
Да
>3. Есть ли какие-нибудь альтернативные клиенты Оракла, кроме стандартного из портов?
>4. Если ставить линуксового клиента Оракла, то потребуется ли ставить линуксолятор на
>FreeBSD?
>sqlplus @elt
>
>см. у клиента в bin
>У того клиента Оракла, который идёт в портах по умолчанию (oracle8-client-0.1.1_1) нету sql+.... вот в чём беда.
>10. При попытке открыть *.html файл всё классно, а при попытке открыть *.php - увы, только передача содержимого файла на клиента.Попробуйте:
ъ# echo 'application/x-httpd-php php' < /usr/local/etc/apache22/mime.types
# echo 'application/x-httpd-php-source phps phtml' < /usr/local/etc/apache22/mime.types
# apachectl restart
ПХП заработал, спасибо.
Теперь вопросы с подключением к Ораклу (см пост 4, он каким-то образом перед постом 3 оказался.....)
Люди, ещё подскажите, пожалуйста, вот чего: у Анархиста в статье http://www.nixp.ru/articles/freebsd_apache_php_oracle после установки порта oracle8-client-0.1.1_1 функция phpinfo() в раздели про OCI8 выдаёт версию ораклового клиента такую: Revision $Revision: 1.269.2.18 $.
А когда я ставлю из портов (перед этим обновляя их через CVSup), то у меня версия меньше: Revision $Revision: 1.269.2.16.2.37 $. Если я качаю пакадж с ftp://www.freebsd.org, то версия у меня не меняется.
Если кто знает, надоумьте, где стырить более позднюю версию этого пакета (как у Анархиста).Сейчас проблема такая: скрипт на функции $conn = OCILogon("<user>", "<pass>", "elt"); виснет наглухо. Через 60 секунд Апач просто просто предлагает забрать файл с этим ПХП скриптом.
Так. Ситуация изменилась. Паника была не по тому поводу. С ПХП всё ОК.
Скрипт
<?php
$conn = OCILogon("<user>", "<pass>", "elt");
if (!$conn) {
exit;
}
echo OCIServerVersion($conn) ."\n";
$query = 'SELECT sysdate FROM dual';
$stid = OCIParse($conn, $query);
OCIExecute($stid, OCI_DEFAULT);
while ($succ = OCIFetchInto($stid, $row, OCI_RETURN_NULLS)) {
foreach ($row as $item) {
print ($item?htmlentities($item):' ');
}
}
OCILogoff($conn);
?>
при непосредственном выполнении
/usr/php524/bin/php -f /usr/local/apache2/htdocs/ora_test.php
выдаёт результат:
Oracle Database 10g Release 10.2.0.1.0 - 64bit Production
25-OCT-07#Т.е. клиент Оракла работает, ПХП на выходе даёт текстовую строку, которую должен передать клиенту Апач. Но Апач почему-то при выполнении скрипта упорно виснет......
Кто знает, почему после выполнения скрипта типа
<?php
phpinfo();
?>
всё классно, а при выполнении скрипта с функциями OCI всё плохо?
Помаленьку продвигаемся....
Помогла строка в httpd.confAddHandler php-script .html
Теперь встал вопрос с кодировкой, получаемой из БД :) Зяблики какие-то приходят. Когда решу напишу как.