Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: PHP + MSSQL + Ubuntu  (Прочитано 6587 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн IgorN

  • Автор темы
  • Участник
  • *
  • Сообщений: 120
    • Просмотр профиля
PHP + MSSQL + Ubuntu
« : 21 Июля 2009, 10:16:30 »
Понадобилось связать их, в сети нашел несколько статей и пытался по ним делать, но нечего не получилось.
Установил через менеджер пакетов модуль к пхп php5_sybase, в phpinfo() поzвилась поддержка MSSQL
mssql
MSSQL Support enabled
Active Persistent Links 0
Active Links 0
Library version FreeTDS

Directive Local Value Master Value
mssql.allow_persistent On On
mssql.batchsize 0 0
mssql.charset no value no value
mssql.compatability_mode Off Off
mssql.connect_timeout 5 5
mssql.datetimeconvert On On
mssql.max_links Unlimited Unlimited
mssql.max_persistent Unlimited Unlimited
mssql.max_procs Unlimited Unlimited
mssql.min_error_severity 10 10
mssql.min_message_severity 10 10
mssql.secure_connection Off Off
mssql.textlimit Server default Server default
mssql.textsize Server default Server default
mssql.timeout 60 60
Для теста сделал пхп файл с таким кодом

echo "Testing...";
  if ($db = mssql_connect('85.241.12.51\ARTEM,1456','login','password')){
    echo $db;
    mssql_select_db('SOKLinkMoney', $db);  
    echo "connected to a database";
    mssql_close($db);
  } else {
    echo "connection failed";
  }
  echo "test";

Так же установил freetds, unixodbc, odbc и еще что то.

В конфиге freetds прописал


# A typical Microsoft server
[MyMSSQL]
host = 85.241.12.51\ARTEM
port = 1456
tds version = 8.0

и врубил логирование.

При запуске скрипты вылетает ошибка

Цитировать
Testing...
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: 85.241.12.51\ARTEM,1456 in /home/igor/Projects/Gekos/linkmoney/public/mssql.php on line 8
connection failedtest

Вместа передачи хоста пробовал передать "MyMSSQL" но эффект тот же.

В логе freetds
Цитировать
log.c:190:Starting log file for FreeTDS 0.82
   on 2009-07-21 09:03:12 with debug flags 0x4fff.
iconv.c:197:names for ISO-8859-1: ISO-8859-1
iconv.c:197:names for UTF-8: UTF-8
iconv.c:197:names for UCS-2LE: UCS-2LE
iconv.c:197:names for UCS-2BE: UCS-2BE
iconv.c:363:iconv to convert client-side data to the "ANSI_X3.4-1968" character set
iconv.c:516:tds_iconv_info_init: converting "US-ASCII"->"UCS-2LE"
net.c:836:tds7_get_instance_port(85.241.12.51, ARTEM,1456)
net.c:905:tds7_get_instance_port: timed out on try 0 of 16
net.c:905:tds7_get_instance_port: timed out on try 1 of 16
net.c:905:tds7_get_instance_port: timed out on try 2 of 16
net.c:905:tds7_get_instance_port: timed out on try 3 of 16
net.c:905:tds7_get_instance_port: timed out on try 4 of 16
net.c:905:tds7_get_instance_port: timed out on try 5 of 16
net.c:905:tds7_get_instance_port: timed out on try 6 of 16
net.c:905:tds7_get_instance_port: timed out on try 7 of 16
net.c:905:tds7_get_instance_port: timed out on try 8 of 16
net.c:905:tds7_get_instance_port: timed out on try 9 of 16
net.c:905:tds7_get_instance_port: timed out on try 10 of 16
net.c:905:tds7_get_instance_port: timed out on try 11 of 16
net.c:905:tds7_get_instance_port: timed out on try 12 of 16
net.c:905:tds7_get_instance_port: timed out on try 13 of 16
net.c:905:tds7_get_instance_port: timed out on try 14 of 16
net.c:905:tds7_get_instance_port: timed out on try 15 of 16
net.c:974:instance port is 0
login.c:418:invalid port number
dblib.c:1372:dbclose(0x7fcf9b986fe0)
dblib.c:256:dblib_del_connection(0x7fcf8ebf15a0, 0x7fcf9b9879c0)
mem.c:563:tds_free_all_results()
dblib.c:303:dblib_release_tds_ctx(1)
dblib.c:5727:dbfreebuf(0x7fcf9b986fe0)
dblib.c:718:dbloginfree(0x7fcf9b8465b0)


Меня смущает название хоста "85.241.12.51\ARTEM,1456" но под виндой все работает с таким названием.

Еще пробовал править файлы odbc.ini and odbcinst.ini

В odbc.ini прописал

[FreeTDS]
Description = FreeTDS
Driver = FreeTDS
Servername = 85.241.12.51\ARTEM // тут пробовал еще ставить "MyMSSQL"
Database = SOKLinkMoney
UID = user
PWD =password
Port = 1456
Trace = Yes
TraceFile = /tmp/mstest.log // кстати файл лога не появился

В odbcinst.ini прописал

[FreeTDS]
Description    = TDS driver (Sybase/MS SQL)
Driver        = /usr/lib/odbc/libtdsodbc.so
Setup        = /usr/local/lib/libtdsodbc.so
Trace = Yes
TraceFile = /tmp/freetds.log
FileUsage = 1

Вроде уже и так и этак пробовал но не пашет. Подскажите в чем может быть трабла, где я запарол. Может ссылку на статью где точно все верно работает. Уже бьюсь, бьюсь но толку пока нет.
Заранее благодарен за ответы.
« Последнее редактирование: 21 Июля 2009, 10:21:50 от IgorN »

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #1 : 21 Июля 2009, 11:14:34 »
Могу ошибаться, но скорее всего, у Вас проблема из-за обратной косой черты  - \.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #2 : 21 Июля 2009, 11:36:02 »
У FreeTDS конфиг неправильный.

У меня вот какой:

$ cat /etc/freetds.conf
...
[ABC]
host = 192.168.xx.xx
port = 1433
tds version = 8.0
...


$ cat /etc/odbc.ini
[ABC_STEND]
Driver           = FreeTDS
Description      = MSSQL Server
Trace            = No
Servername       = ABC
Database         = ABC_STEND

$ cat /etc/odbcinst.ini
# Example driver definitinions
#
#
[FreeTDS]
Description     = FreeTDS unixODBC Driver
Driver          = /usr/lib/libtdsodbc.so
Setup           = /usr/lib/libtdsodbc.so
UsageCount      = 1

Работает с FreeTDS версий 0.64 и 0.84 (на разных компьютерах). Там в файлах даны примеры и комментарии, надо их копировать.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн IgorN

  • Автор темы
  • Участник
  • *
  • Сообщений: 120
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #3 : 21 Июля 2009, 12:00:11 »
Могу ошибаться, но скорее всего, у Вас проблема из-за обратной косой черты  - .

А где именно? Пробовал менять в скрипте но тогда вообще в логе freetds была ошибка о не найденом сервере.

Пользователь решил продолжить мысль 21 Июля 2009, 10:01:27:
У FreeTDS конфиг неправильный.

У меня вот какой:

$ cat /etc/freetds.conf
...
[ABC]
host = 192.168.xx.xx
port = 1433
tds version = 8.0
...


$ cat /etc/odbc.ini
[ABC_STEND]
Driver           = FreeTDS
Description      = MSSQL Server
Trace            = No
Servername       = ABC
Database         = ABC_STEND

$ cat /etc/odbcinst.ini
# Example driver definitinions
#
#
[FreeTDS]
Description     = FreeTDS unixODBC Driver
Driver          = /usr/lib/libtdsodbc.so
Setup           = /usr/lib/libtdsodbc.so
UsageCount      = 1

Работает с FreeTDS версий 0.64 и 0.84 (на разных компьютерах). Там в файлах даны примеры и комментарии, надо их копировать.

Попробую, вчера много ковырял и вариантов пробовал может, что то упустил

Пользователь решил продолжить мысль 21 Июля 2009, 12:33:16:
Попробовал сделать. Но не заработало

Сделал такие конфиги

freetds.ini

# A typical Microsoft server
[Linkmoney]
host = 89.249.18.59\ARTEM
port = 1456
tds version = 8.0

odbc.ini

[SOKLinkMoney]
Description = MSSQL Server
Driver = FreeTDS
Trace         = No
Servername    = Linkmoney
Database      = SOKLinkMoney

odbcinst.ini

[FreeTDS]
Description     = FreeTDS unixODBC Drive
Driver          = /usr/lib/libtdsodbc.so
Setup           = /usr/lib/libtdsodbc.so
UsageCount      = 1

Ед. не понятно а в скрипте как правильно обращаться?  По ключевому слову "Linkmoney" при коннекте нечего не происходит

Пробовал так

$db = mssql_connect(85.241.12.51:ARTEM','login','password')

В логи уже записалось нечто другое

Цитировать
log.c:190:Starting log file for FreeTDS 0.82
   on 2009-07-21 11:24:09 with debug flags 0x4fff.
iconv.c:363:iconv to convert client-side data to the "ANSI_X3.4-1968" character set
iconv.c:516:tds_iconv_info_init: converting "US-ASCII"->"UCS-2LE"
net.c:210:Connecting to 85.241.12.51 port 1433 (TDS version 4.2)
net.c:264:tds_open_socket: connect(2) returned "Operation now in progress"
util.c:334:tdserror(0x7f5345f2f440, 0x7f53460bee40, 20008, 115)
dblib.c:7782:dbperror(0x7f53460be540, 20008, 115)
dblib.c:7835:20008: "Unable to open socket"
dblib.c:7856:"Unable to open socket", client returns 2 (INT_CANCEL)
util.c:368:tdserror: client library returned TDS_INT_CANCEL(2)
util.c:389:tdserror: returning TDS_INT_CANCEL(2)
net.c:310:tds_open_socket() failed
dblib.c:1372:dbclose(0x7f53460be540)
dblib.c:256:dblib_del_connection(0x7f533970d5a0, 0x7f53460bee40)
mem.c:563:tds_free_all_results()
dblib.c:303:dblib_release_tds_ctx(1)
dblib.c:5727:dbfreebuf(0x7f53460be540)
dblib.c:718:dbloginfree(0x7f53460c2cd0)

Но блин не пашет. Может что то не доставил или надо еще, что вто в php.ini прописать?

Вообще не понятно, я логин и пароль указываю в конфигурационных файлах, и в скрипте тоже самое. Странно как то.
« Последнее редактирование: 21 Июля 2009, 12:33:16 от IgorN »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #4 : 21 Июля 2009, 17:41:47 »
Вы невнимательно читаете что Вам пишут.

Первоисточник читать пробовали?

Сделал такие конфиги
freetds.ini
# A typical Microsoft server
[Linkmoney]
host = 89.249.18.59ARTEM
port = 1456
tds version = 8.0

Что это за "ARTEM" такой?
Здесь должен быть либо IP-адрес, либо имя хоста, никаких косых артемов.


Ед. непонятно а в скрипте как правильно обращаться?  По ключевому слову "Linkmoney" при коннекте ничего не происходит

Пробовал так

$db = mssql_connect(85.241.12.51:ARTEM','login','password')

С php не знаком, но обычная житейская логика подсказывает, что первым параметром должен идти опять же хост.
Общепринятое правило, просто глобальное - после имени или адреса хоста через двоеточие указывается номер порта.
Если этот порт - один из общеизвестных, для него иногда можно использовать буквенные коды (21 == telnet, 80 == http и т.п.) Не факт, что здесь можно.


В логи уже записалось нечто другое
Естественно.


Цитировать
log.c:190:Starting log file for FreeTDS 0.82
   on 2009-07-21 11:24:09 with debug flags 0x4fff.
iconv.c:363:iconv to convert client-side data to the "ANSI_X3.4-1968" character set
iconv.c:516:tds_iconv_info_init: converting "US-ASCII"->"UCS-2LE"
net.c:210:Connecting to 85.241.12.51 port 1433 (TDS version 4.2)
net.c:264:tds_open_socket: connect(2) returned "Operation now in progress"
Ага, функция умная, непонятный порт ARTEM проигнорировала, полезла в порт по умолчанию - 1433. Раньше Вы писали, что порт 1465. Вероятно, ее там на 1433 порту никто не встретил, вот и вернулась ошибка.

Да. А почему IP адреса разные? В конфиге FreeTDS один, а в коннекте - другой.

Пользователь решил продолжить мысль 21 Июля 2009, 19:29:55:
Далее, еще один вопрос по ходу дела.
Эта mssql_connect как работает, вообще?
Через ODBC или напрямую через FreeTDS?
« Последнее редактирование: 21 Июля 2009, 19:29:55 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн IgorN

  • Автор темы
  • Участник
  • *
  • Сообщений: 120
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #5 : 22 Июля 2009, 10:05:26 »
Без слова ARTEM под виндой не пашет, именно такой хост дали. Я точно не вкурсе "Через ODBC или напрямую через FreeTDS?" IP разный так как пробовал разные и просто в посте не пофиксил.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #6 : 22 Июля 2009, 10:29:02 »
Да, порт артем - это что-то новенькое. :coolsmiley:

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #7 : 22 Июля 2009, 11:11:54 »
Я точно не вкурсе "Через ODBC или напрямую через FreeTDS?"
Это принципиально, т.к. в одном случае надо конфигурировать только FreeTDS, а в другом - все.

Попробуйте проверить настройки соединения с помощью jsqsh и Squirrel SQL client.
Первое - это клиент для командной строки, второе - полноценный графический, причем способный работать и через FreeTDS, и через ODBC, все на яве.


Пользователь решил продолжить мысль 22 Июля 2009, 09:19:31:
Коллега PHProграммист утверждает, что не через ODBC.
Значит, надо настраивать только FreeTDS.

Squirrel SQL client имеет драйвера JavaDBC и JavaTDS - им можно проверить все настройки.

Пользователь решил продолжить мысль 22 Июля 2009, 12:54:31:
И последнее, самое главное, на случай, если автор не догадался сам.
http://lmgtfy.com/?q=mssql_connect
« Последнее редактирование: 22 Июля 2009, 12:54:31 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн IgorN

  • Автор темы
  • Участник
  • *
  • Сообщений: 120
    • Просмотр профиля
Re: PHP + MSSQL + Ubuntu
« Ответ #8 : 22 Июля 2009, 17:33:10 »
Спасибо, буду ковырять


 

Страница сгенерирована за 0.02 секунд. Запросов: 22.