2012-02-09 1 views
2

Вот проблема, которая сейчас поражает моими ящиками.PHP не может подключиться, но SqlPlus может

Существует сервер oracle, к которому я хочу подключиться. Я могу легко подключиться к нему с помощью командной строки sqlplus.

Когда я пытаюсь подключиться к базе данных оракула с помощью PHP, это терпит неудачу. Вот улов, у нас такая же настройка в другом датацентре; машина PHP пытается подключиться к базе данных оракула. Я запустил тот же самый код, настроил php одинаково на обеих машинах PHP.

PHP1 может подключаться к Oracle1 с использованием как sqlplus, так и php.

PHP2 подключается к Oracle2 с sqlplus, но НЕ с PHP.

Существуют брандмауэры и блокировка портов. Мое настоящее объяснение заключается в том, что порт php2, используемый для подключения к oracle2, не является значением по умолчанию 1521, и он блокируется.

Ошибка ора я получаю:

ORA-06413: соединение не открыто.

Любые идеи?

+1

Знаете ли вы, что порт не является 1521 - вы можете увидеть подробности подключения, которые SQL * Plus использует, например. в вашем 'tnsnames.ora', если вы используете псевдоним? Кажется маловероятным, что это проблема сети или брандмауэра, если один клиент может подключиться, а другой - нет. Я предполагаю, что оба подключения предпринимаются с одной и той же клиентской машины, это правда? –

+0

Если вы настроили php одинаково на обеих машинах, почему один из них подключается через другой порт? Если бы это было так, я бы сказал, что вы не настроили их одинаково ... – Svish

ответ

1

Ошибка указывает, что дескриптор соединения TNS не может быть проанализирован по той или иной причине. Обычно это проблема с системным вызовом, созданным Oracle, когда он пытается создать информацию о соединении.

Есть ли скобки в имени вашей программы, имени пользователя или имени машины?

Вы случайно используете 32-битный клиент Oracle в 64-разрядной ОС Windows?

Попробуйте использовать утилиту tnsping из командной строки. О чем тебе это говорит?

+0

PHP был в пути C: \ Program Files (x86) \ PHP. Все, что мне нужно было сделать, это поставить его на путь без круглых скобок. (C: \ PHP) –

0

От информации предоставляется, моя догадка (сужение его программирование причин) является то, что либо имя базы данных, имя пользователя или пароль, отправляемый из проблемной машины содержит управляющую последовательность ($, \t, \a, \r и т.д.) что при вводе вашего PHP-скрипта в виде строкового литерала изменяется.

+0

Я думал, что слишком изначально, но строки подключения на PHP2 и PHP1 идентично написаны. Это означает, что они оба записаны в следующем формате: «10 .10.10.10: 1521/databaseName» –

+0

Ну, если нет escape-последовательностей, и код в противном случае идентичен, это может быть проблема с сетью/конфигурацией. Возможно, это необходимо перенести на serverfault. – webbiedave

+0

Спасибо webbiedave. Может быть, модератор сделает это для меня. –