oci_connect Пустая страница в PHP
ОБНОВЛЕНИЕ (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-скрипт.
ПРИМЕР:
<?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 ответов
Это было исправлено. См. Верхнюю часть для подробностей, но вот примечания к скале: среды виртуализации имеют значение.
Есть ли в Apache error_log что-нибудь? Это mod_php или FastCGI или обычный CGI PHP? Что произойдет, если вы запустите скрипт через командную строку?
Вы также можете попробовать установить журнал ошибок PHP и посмотреть там.
РЕДАКТИРОВАТЬ1: Попробуйте:
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 на наличие ошибок при запуске и посмотрите разделы выше, чтобы решить эту проблему.
У кого-нибудь еще есть идеи, чтобы помочь Брайану?
Брайан,
Я собираюсь быть честным: я попробовал это два года назад и потерпел неудачу.:) Я не мог заставить функции OCI работать на что-либо, компилируя себя.
Но в целях достижения этой цели я искал альтернативное решение и нашел его в Zend Core для Oracle. Все, что я сделал, это скачал, запустил установщик, и это было сделано. Он устанавливает Apache/PHP, MySQL (необязательно) и InstantClient для вас.
Теперь, как Zend Server, это в основном тот же продукт. Я понимаю, что это может быть не то решение, на которое вы надеялись, но если оно сработает...
Вы никогда не проверяете возвращаемое значение oci_connect() или вызываете oci_error(), но это не выглядит актуально для вашей проблемы, так как вы, похоже, страдаете из-за сбоя PHP. Существует открытая ошибка для RHEL, которая может повлиять и на вас:
http://pecl.php.net/bugs/bug.php?id=16626
Вы сами создали пакет oci8? Вы используете сторонний бинарный файл?
Вы подключаетесь к удаленному или локальному БД? я думаю, для localhost вы должны заменить "host" на "false". Я надеюсь, что это поможет вам...
редактировать: я думаю, вам не хватает параметра... мои последние предложения: 1. вы должны установить порт (по умолчанию 1521) И / ИЛИ 2. Вы должны ввести имя БД И / ИЛИ вы должны установить имя экземпляра (Параметр ORACLE_SID)