oci_connect Пустая страница в PHP - PullRequest
5 голосов
/ 05 марта 2010

ОБНОВЛЕНИЕ (21.05.2010) УСПЕХ!

Итак, после MUCH $ head-> desk () я решил это.

Помните, дети, остерегайтесь используемой вами версии клиента в зависимости от настроек виртуализации!

Я устанавливал общий Instant Client (не подозревая, что наши серверы ESX установлены на процессорах AMD, а не Intel), и он работал нормально внутри (установка CentOS была 32-разрядной, поскольку наши внутренние серверы ESXi не 64-разрядные) , Что ж, даже если у вас установлена ​​32-разрядная установка на виртуализированном сервере, который установлен на AMD64, все равно имеет значение, какой клиент вы устанавливаете мгновенно.

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

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


ОБНОВЛЕНИЕ (21.05.2010) Я думал, что эта ошибка ускользнула от меня, когда я установил ее на новую виртуальную машину, но теперь нашел сужающуюся ссылку.

Я пытался установить это на наш производственный сервер, когда отправил это. После недели бездействия и необходимости вернуться к разработке я оснастил виртуальную машину на нашем внутреннем сервере новой установкой Crap ... CentOS и новыми установками мгновенного клиента и oci8.

отлично сработало.

Однако мы только что загрузили точную копию виртуальной машины на наши производственные серверы, и она волшебным образом больше не работает. Пробовал переустанавливать все безрезультатно.

Таким образом, единственное, к чему я мог сузить проблему, это проблема с брандмауэром (хотя я получаю ту же проблему при попытке 127.0.0.1) или, возможно, проблема с сервером ESX (наши производственные серверы), внутренние серверы работают под управлением ESXi.

Есть мысли?

ОБНОВЛЕНИЕ (08.03.2010) Я установил Xdebug, и он отслеживает мой код. Это вывод, который я получаю:

TRACE START [2010-03-08 17:53:05]
    0.2090     327864   -> {main}() /data/aims3/http/octest.php:0
    0.2091     327988     -> ini_set(string(14), string(1)) /data/aims3/http/octest.php:3
    0.2093     327920     -> error_reporting(long) /data/aims3/http/octest.php:4
    0.2094     328048     -> oci_connect(string(8), string(8), string(25)) /data/aims3/http/octest.php:6

След останавливается в этой точке.

Я установил все так же на локальном сервере, и он работает нормально. Сказать, что я в полной растерянности, было бы легко.


* ПРИМЕЧАНИЕ : я запускал make test, и он возвращал FAIL при каждом тесте. Я никогда не запускал это на своей рабочей машине, чтобы увидеть, сообщает ли она о тех же ошибках. Любая идея, почему make test сообщает об ошибке, но make не сообщает об ошибке?

Я установил Oracle Instantclient без сообщений об ошибках вместе с пакетом OCI8 PECL и в убыток. Всякий раз, когда я пытаюсь открыть соединение с помощью oci_connect, он останавливает весь мой PHP-скрипт.

Пример: * 1 052 *

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
$conn = oci_connect("username", "password", "host");
echo "after";
?>

Возвращает полную пустую страницу. Модуль загружен (видно в phpinfo) и все установлено без ошибок.

Я в полной растерянности.

CentOS: 5,4

Apache: 2.2.3

PHP: 5.3.1

InstantClient: 11,2

oci8: 1.4.1

Есть мысли?

ПРИМЕЧАНИЯ

Apache Error Log ничего не сообщает

Попытка отладки:

1:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');
echo "after";
?>

Возвращает:

beforeafter

2

Смена хоста на // хост

Возвращает:

Та же ошибка

Ответы [ 5 ]

3 голосов
/ 05 марта 2010

Есть ли в Apache error_log что-нибудь?Это mod_php или FastCGI или обычный CGI PHP?Что произойдет, если вы запустите скрипт из командной строки?

Вы также можете попробовать установить Журнал ошибок PHP и посмотреть там.


EDIT1: Попробуйте:

echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');

И опубликуйте результаты ...


EDIT2: Я действительно не уверен.Моя лучшая ставка - это информация из руководства по PHP :

Самая распространенная проблема с установкой OCI8 - неправильно настроенная среда Oracle.Обычно это возникает как проблема при использовании oci_connect () или oci_pconnect ().Ошибка может быть ошибкой PHP, такой как вызов неопределенной функции oci_connect (), ошибка Oracle, такая как ORA-12705, или даже сбой Apache.Проверьте файлы журнала Apache на наличие ошибок при запуске и просмотрите разделы выше, чтобы решить эту проблему.

У кого-нибудь еще есть идеи, чтобы помочь Брайану?

1 голос
/ 13 мая 2010

Bryan

Я собираюсь быть честным: я попробовал это два года назад и потерпел неудачу с треском. :) Я не мог заставить функции OCI работать на что-либо, компилируя себя.

Но в интересах достижения этой цели я искал альтернативное решение и нашел его в Zend Core для Oracle. Все, что я сделал, это скачал, запустил установщик, и это было сделано. Он устанавливает Apache / PHP, MySQL (необязательно) и InstantClient для вас.

Теперь, как и Zend Server, это в основном тот же продукт. Я понимаю, что это может быть не то решение, на которое вы надеялись, но если оно сработает ...

Zend Server

0 голосов
/ 22 мая 2010

Это было исправлено. Подробности смотрите в топе, но здесь есть примечания к скале: среды виртуализации имеют значение.

0 голосов
/ 08 марта 2010

Вы никогда не проверяете возвращаемое значение oci_connect () или вызываете oci_error (), но это не выглядит актуально для вашей проблемы, так как вы, похоже, страдаете от сбоя PHP. Есть открытая ошибка для RHEL, которая может повлиять и на вас:

http://pecl.php.net/bugs/bug.php?id=16626

Вы сами собрали пакет oci8? Вы используете сторонний бинарный файл?

0 голосов
/ 06 марта 2010

вы подключаетесь к удаленному или локальному БД? я думаю, для localhost вы должны заменить «host» на «false». Надеюсь, это поможет вам ...

edit: я думаю, вам не хватает параметра ... мои последние предложения: 1. вы должны установить порт (по умолчанию 1521) И / ИЛИ 2. Вы должны ввести имя БД И / ИЛИ вы должны установить экземпляр имя (параметр ORACLE_SID)

...