Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx / 10 сообщений из 10, страница 1 из 1
28.01.2014, 20:37
    #38541233
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
Здравствуйте!
Помогите сконектиться. Сейчас всё на локальной машине в Вин-7, а вообще надо через локал. сеть. Сразу скажу, что php_sybase_ct.dll не подходошел по причине:
Код: plaintext
"Not supported in multithreaded Web servers - use extension=php-5.2.6_sqlanywhere.dll"
, а нужен поточный.

Для доступа к ASA скачиваю файл php-5.2.6_sqlanywhere.dll, в нём нащупал такие параметры:
Код: php
1.
sasql_connect("ENG=servername;DBN=bdname;DBF=path\file;UID=user;PVD=pssw")


Получаю в браузере 3 вида ошибок:
1) Если задать без ENG=..., и без DBF=..., то скрипт выдаёт ошибку
Код: plaintext
SQLAnywhere: [-100] Database server not found

2) Вписываю ENG=... либо DBN=..., теперь
Код: plaintext
SQLAnywhere: [-72] No database file specified in  (ссылка на sasql_connect(......))

3) Вписываю DBF=..., OK и далее всё читается. НО! Если сервер на машине запущен, то пишет, что уже есть такое соединение.
Причём всё это независимо от того есть или нет файла SQL.ini, в котором пробовал разные варианы:

Код: plaintext
1.
2.
3.
4.
[ABCDE]
query=TCP,127.0.0.1:2638
query=TCP,192.x.x.x:2638
query=NLWNSCK,192.x.x.x:2638
query=NLWNSCK,127.0.0.1:2638

В результате думаю, то ли удалённую базу невозможно прочитать, то ли читать можно только неподнятый файл базы? то ли не через эту DLL? Но ведь народ работает как-то? И что, теперь надо переходить на однопоточный Апач как это написано в ошибке?
За любую помощь заранее благодарен.
...
Рейтинг: 0 / 0
28.01.2014, 21:51
    #38541292
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
exp98Здравствуйте!
Помогите сконектиться. Сейчас всё на локальной машине в Вин-7, а вообще надо через локал. сеть. Сразу скажу, что php_sybase_ct.dll не подходошел по причине:
Код: plaintext
"Not supported in multithreaded Web servers - use extension=php-5.2.6_sqlanywhere.dll"
, а нужен поточный.Вообще-то он должен был тебе не подойти по причине того что это вообще не от того сервера модуль.
Если у тебя СУБД SA, то и бери модуль sqlanywhere.
Вот если бы у тебя ASE была бы, и OpenClient установлен, то тогда и только тогда надо было бы брать sybase_ct модуль.

exp98Для доступа к ASA скачиваю файл php-5.2.6_sqlanywhere.dll, в нём нащупал такие параметры:
Код: php
1.
sasql_connect("ENG=servername;DBN=bdname;DBF=path\file;UID=user;PVD=pssw")


Ну пока вроде правильно... если у тебя конечно СУБД на той-же машине что и httpd. Если на разных то DBF лишняя.

exp98Получаю в браузере 3 вида ошибок:
1) Если задать без ENG=..., и без DBF=..., то скрипт выдаёт ошибку
Код: plaintext
SQLAnywhere: [-100] Database server not found
Естественно. Где сервер то?

exp982) Вписываю ENG=... либо DBN=..., теперь
Код: plaintext
SQLAnywhere: [-72] No database file specified in  (ссылка на sasql_connect(......))
А это значит что он пытается запустить локальный сервер, но локальному серверу надо знать где лежит файл базы.

exp983) Вписываю DBF=..., OK и далее всё читается. НО! Если сервер на машине запущен, то пишет, что уже есть такое соединение.Все верно. Один и тот-же файл базы может обрабатываться только одним сервером.

exp98Причём всё это независимо от того есть или нет файла SQL.ini, в котором пробовал разные варианы:

SQL.ini - на помойку. Это файл из OpenClient и SA отношения не имеет никакого.

exp98В результате думаю, то ли удалённую базу невозможно прочитать, то ли читать можно только неподнятый файл базы? то ли не через эту DLL? Но ведь народ работает как-то? И что, теперь надо переходить на однопоточный Апач как это написано в ошибке?
За любую помощь заранее благодарен.Надо прочитать инструкцию:
http://infocenter.sybase.com/help/topic/com.sybase.help.sqlanywhere.12.0.0/dbadmin/da-part-starting.html

А если кратко: на одной машине запускаешь dbsrvX.exe (X - номер версии твоей ASA) и указываешь серверу параметром файл с базой. Сервер запустится с именем файла базы. Если хочешь изменить - параметр -n.
В php скрипте достаточно указать только один ENG с именем сервера. Если у тебя на сервере две базы - тогда нужен DBN. Если одна - DBN не нужен.
DBF нужен только для локальных серверов (который dbengX) и который не принимает клиентов по сети.
...
Рейтинг: 0 / 0
29.01.2014, 12:54
    #38541917
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
White Owl, очень подробно, просветили, спасибо.
Пока думаю и читаю, т.к. с первой попытки запуск на одной машине httpd и "dbsrv11.exe -n abcde c:\wrk\d\baza.db" эффекта не дал: Не найден сервер.
...
Рейтинг: 0 / 0
29.01.2014, 20:38
    #38542751
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
Наверное вопрос теперь в РНР.
В общем безрезультатно(( Из-за однотипной реакции на все эксперименты создалось впечатление, что в этой DDL-ке вырезана возможность искать запущенный сервер либо вообще tcpip-возможность.
Из пассивной базы читается, а из стартанутой нет. Читается только по имени файла.
В других случаях, сколько ни читаю доку, всё равно либо Не найден сервер, либо Укажите файл базы, ну и либо Файл уже используется.
Что через 127,0,0 запусккаю, что через 192.ххххх, реакция одинаковая. Это когда всё на одном компе.
Аналогичо не работают ENG и DBN без DBF, и когда dbsrv11 запущен на удалённом компе. А через Централь она открывается ОК, да и просто она там вертится постоянно.

Что я неправильно сделал? Вот строка:
Код: plaintext
  dbsrv11.exe -x tcpip -n abcde  [имя файла базы]
Прикол ещё в том, что буква в букву так же, если надо запускать в режиме Open Server, и тогда нужен Клиент и SQL.ini, которые тоже стоят, но результат тот же самый:
-------------------------------
Код: php
1.
2.
3.
4.
5.
6.
7.
Starting the database server as an Open Server 
If you want to use SQL Anywhere as an Open Server, you must ensure that you start it using the TCP/IP protocol. By default, the server starts all available communications protocols, but you can limit the protocols started by listing them explicitly in the command. For example, the following commands are both valid: 

[FIXED]  dbsrv11 -x tcpip -n myserver c:\mydata.db[/FIXED]
  
You can use the personal database server as an Open Server for communications on the same computer because it supports the TCP/IP protocol. 
The server can serve other applications through the TCP/IP protocol or other protocols using the SQL Anywhere-specific application protocol at the same time as serving Open Client applications over TDS. 


-------------------------------
Вот фрагмент с консоли после запуска:
--------------------------------------------
Код: php
1.
2.
3.
4.
5.
6.
7.
Database server started at Wed Jan 29 2014 16:22
Trying to start SharedMemory link ...
    SharedMemory link started successfully
Trying to start TCPIP link ...
Starting on port 2638
    TCPIP link started successfully
Now accepting requests


--------------------------------------------

А вот как в хэлпе у меня на компе для SA в.11 (в инете для в.12, и есть отличия)
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Connection parameter tips
ServerName connection parameter [ENG] 
Specifies the name of a running database server to which you want to connect. This is a synonym for EngineName.
Remarks 
ServerName is not needed if you want to connect to the default local database server.
You need to supply a ServerName if more than one local database server is running, or if you want to connect to a network server.
The server name is interpreted according to the character set of the client computer. 

DatabaseName connection parameter [DBN] 
If the database you want to connect to is already running, you should specify the database name rather than the database file.
A connection will only occur if the name of the running database matches the name that is specified in the DatabaseName (DBN) parameter. 
Note
If you specify both the database file and the database name, an attempt is made to connect to a running database with the specified name (the database file is ignored), and if that fails, an attempt is made to autostart a database using both the database file and database name. 

Example 
To start a database file named cities.db and rename the database Kitchener, you can use the following command: 
dbeng11 cities.db -n Kitchener

Assuming you have run the above command, you can successfully connect to the running database named Kitchener as follows:
DBN=Kitchener


-------------------------------
Код: php
1.
2.
3.
4.
Connecting to a server on a network 
To connect to a database running on a network server somewhere on a local or wide area network, the client software must locate and connect to the database server. SQL Anywhere provides a network library to handle this task. 

Network connections occur over a network protocol. TCP/IP is available on all platforms. 


-------------------------------
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Connecting from SQL Anywhere APIs 
To establish a connection, the client application calls functions in one of the SQL Anywhere interfaces. SQL Anywhere provides the following interfaces: 
 
-OLE DB Connecting to a database using OLE DB 
-ADO.NET Connecting to a database 
-Embedded SQL SQL Anywhere embedded SQL 
-Sybase Open Client Using SQL Anywhere as an Open Server

Sybase Open Client API
iAnywhere JDBC driver Connecting from a JDBC client application

SQL Anywhere JDBC API
jConnect JDBC driver Connecting from a JDBC client application

SQL Anywhere JDBC API

The interface uses connection information included in the call from the client application, perhaps together with information held in a data source, the SQLCONNECT environment variable, or the server address cache, to locate and connect to a server running the required database. The following figure is a simplified representation of the pieces involved. 


-------------------------------
В общем не знаю что делать, пока так буду отлаживать или по ODBC. Может это что-то из случая кроссдоменных запросов или interface library. Но скорее DLL не пригодна для работы из Апача.
И да, в SQL.ini надо было порт писать через запятую, тогда в DSEdit сервер пингуется успешно.
...
Рейтинг: 0 / 0
30.01.2014, 01:14
    #38542958
Sergey Orlov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
exp98,
Это запуск сервера
dbsrv11.exe -x tcpip -n abcde [имя файла базы]
А это для коннекта к нему sasql_connect=
("ENG=abcde;DBN=[имя файла базы];UID=user;PVD=pssw; COMMLINKS=TCPIP {HOST=<ip компа где сервер>:<порт>}")
В {} можно написать{HOST=<ip компа где сервер>:<порт>; BROADCAST=NO}, порт обычно 2638, его можно не указывать...
...
Рейтинг: 0 / 0
30.01.2014, 01:28
    #38542963
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
Откуда ты взял Open Client?
Он с SA не поставляется, и он для SA совершенно не нужен. Ты сейчас пытаешься работать одновременно с двумя протоколами (тремя если учитывать ODBC), не зная толком ни один из них. Это путает тебе всю картину и размазывает внимание. Забудь про OC, научись сначала работать с родным для SA протоколом связи. Станешь экспертом - возьмешься за OC как вторично-третичную развлекаловку. Но сейчас - ЗАБУДЬ О НЕМ!


Давай по шагам:
1) на машине A запускаешь
dbsrv11 -n abcd c:\myfile.db
2) на ТОЙ ЖЕ машине A запусаешь
dbisql -c "ENG=abcd"
3) на другой машине B запусаешь
dbisql -c "ENG=abcd"
Работает?

Если родной клиент работает на всех трех этапах - проблема в PHP.
Если проблема на втором этапе - у тебя чудеса-чудесные и надо заново инсталлировать SA (и стереть к чертям OpenClient и SQL.INI)
Если проблема на третьем этапе - у тебя либо нарушена инсталляция на второй машине, либо нету лицензии на сетевые подключения на сервере, либо используемые машины находятся в разных LAN, либо они по разные стороны файрвола, либо на них (одной или обоих) запрещены броадкасты (некоторые сисадмины-параноики это делают).

В любом случае, показывай все тексты которые выводит при старте сервер и все сообщения от клиентов. Не надо постить куски документации, мы их уже читали. Мы сами тебе запостим тот кусок который ты не дочитал :)
...
Рейтинг: 0 / 0
30.01.2014, 10:17
    #38543146
Teck
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
А чем коннект к базе через ODBC не устраивает?
...
Рейтинг: 0 / 0
30.01.2014, 12:59
    #38543459
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
Ого! Не ожидал, спасибо огромное всем)
Чем ОДБС? В целом не знаю чем) в большинстве тем, где "помогите РНР+Sybase" стараются через библиотеки.
А вообще работа на линуксах всё будет (в основном, но необязательно).
Проблемы в том, что строить пока приходится на Винде. Плюс в том, что есть база, которая вертится в этой же локальной сети. Это к вопросу в одной или нет локалке, файервола и прокси нет (сейчас). Я же писал, что через Централь соединяюсь и с собой и с удалённой базой. Ещё через Socket соединяюсь, через JDBC тоже.

Трудность пока в том, что на второй машине хозяин будет на след. неделе.
SA конечно лицензионный, но с какими-то ограничениями.
Client-а качал с инета, конечно не с радости, но он для AS-15.5, его убрать нетрудно - "set SYBASE=" и нет его. Только рез-т не меняется.
isql сейчас буду пытаться, и как Орлов посоветовал тоже (да COMMLINKS из функции я упустил из виду).
Сейчас ещё линух надо заводить, в общем всё одновременно. Ну то есть как тот специалист широкого профиля - обо всём по-немногу, cпецифика такая.
...
Рейтинг: 0 / 0
30.01.2014, 14:22
    #38543651
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
exp98...
А вообще работа на линуксах всё будет (в основном, но необязательно).


ODBC -- кроссплатформенный API. На Linux он тоже есть.
Оно конечно, запалить его там обычно немного сложнее, но всё же...
...
Рейтинг: 0 / 0
30.01.2014, 14:38
    #38543683
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx
Уррааа!! Всем спасибо огромное!! Спасибо за разъяснения тоже.
Вот же, блин, COMMLINKS какой. Варианты 1)+2) и 1)+3) конечно работают, 1+2+3 проверить не успел.

Работает даже вот так, без {...}:
$conn = sasql_connect("ENG=ab2;DBN=оbj;UID=usver;PWD=pppp;COMMLINKS=TCPIP");

То есть сам находит нужный сервер из 2-х запущенных: один на этой машине, другой на другой.
Ещё раз спасибо за компетентные советы!

П.С. Я знал одного Орлова Сергея 10 лет назад, но он тогда по Ораклу был.

PP.S.
Следующий вопрос возникнет с передачай пароля. В принципе Апач с модулем SSL, и РНР тоже. Напоследок сориентируете, какие могут ожидать тонкости со стороны SA-11 ?
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Помогите сконектиться PHP 5.2.6, Apache 5.2.2.26 --> SQLAnywhere 11.0.xxx / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]