PHP и удаленная Access

Xaoc

Новичок
PHP и удаленная Access

Привет всем!

Помогите разобраться. Есть Accessовская БД на машине. Машина эта подключена к инету.

Есть предположим такой код:
PHP:
<?
$connect=odbc_connect("c:\datasource.dsn", "login","pass") or die("Couldn't connect to datasource.");
$query = "SELECT * FROM table";
$result = odbc_prepare($connect,$query);
odbc_execute($result);
odbc_result_all($result, " border=1");
odbc_close($connect);
?>
ну так вот: что нужно сделать чтобы подключиться с другой машины к этой удаленной системе на которой лежит БД и считать в ней таблицу? в MySQL все просто: mysql_connect и указывай хост - законектится куда надо. А вот как здесь решить эту проблему? Может в коде что cверху как-то указать IP удаленной системы? Помогите, друзья!
 

Линк

Guest
подключаем z: как сетевой диск на \\server\database\
потом
odbc_connect("z:\datasource.dsn", "login","pass")

как идейка?
 

Xaoc

Новичок
Автор оригинала: Линк
подключаем z: как сетевой диск на \\server\database\
потом
odbc_connect("z:\datasource.dsn", "login","pass")

как идейка?
не совсем понял
есть UNIX-система (сервак), находится предположим в Лондоне. Сервак этот хостинг компании. Есть другой вин-сервак, который находится в Австралии. Ну так вот как мне из сервака что в Лондоне без того, чтобы лазить в системные настройки средствами ПХП открыть через ODBC базу данных?
 

Линк

Guest
есть UNIX-система (сервак),
да? А в unix есть odbc или com? нету! значит к access не попасть

есть правда http://www.openlinksw.com/ (там вроде есть ODBC для unix, но я его не тестил)

-~{}~ 11.02.04 20:14:

ODBC идет over rpc кажется, так что по инету (без VPN) ты его не пустишь

слушай! поставь на стороне сервака скрипт, который будет парсить ACCES (по ODBC) и отдавать XML по http

а клиентом будешь собирать
 

Xaoc

Новичок
Автор оригинала: Линк
да? А в unix есть odbc или com? нету! значит к access не попасть
ODBC идет over rpc кажется, так что по инету (без VPN) ты его не пустишь
слушай! поставь на стороне сервака скрипт, который будет парсить ACCES (по ODBC) и отдавать XML по http

а клиентом будешь собирать
наверное я не правильно объяснил и ты меня не понял
есть PHP-скрипт (клиент), скрипт вертится под юниксом, есть комп с Accessовской Базой Данных (типа сервер БД). Между ними связь - инет. Как с помощью клиента подключиться к серверу и работать с Базой Данных?

Если клиент и сервер находятся на одной машине, то это без проблем - код в моем первом посте
но если на разных - как?

на серваке и клиенте ничего кроме написания скрипта сделать не смогу (не дают)
 

Линк

Guest
ну тогда НИКАК
access порт не слушает

значит тебе все равно надо что то на сервере делать
писать скрипт, который берет данные и отдает их по HTTP

-~{}~ 12.02.04 12:20:

acess - это НЕ сервер баз данных!! к нему НЕТ подключения по IP
только через ODBC

ODBC можно пустить по IP
но для этого надо толи rpc толи smb. все равно - по инету не пустишь напрямую
надо делать VPN по инету, и по VPN гнать ODBC
 

SlavikSG

Новичок
У меня тоже есть проблема с удаленной базой Microsoft Access. Только удалена у меня база совсем немного. Находится она всего лишь в локальной сети, на другом компе.

На функцию odbc_connect PHP мне выдает такую ошибку:
Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][Драйвер ODBC Microsoft Access] Не удается запустить приложение. Системная база данных отсутствует или открыта с монопольным доступом другим пользователем.

Это возникает тогда, когда я у себя в винде, на своем локальном компе, в драйвере ODBC, в свойствах "Источника данных", закладка "Системный DSN", указываю, что "Системная база" (файл рабочих групп - system.mdw) находится на сетевом диске. Как только я тот же самый файл переношу на локальный диск своего компа, (где сижу сам), то все начинает работать нормально. Не могу понять, в чем дело. Подскажите, плиз! Почему-то драйвер ODBC упорно не хочет видеть файл рабочих групп на расшареном сетевом диске. А если файл сидит локально, то все пашет на ура. В чем может быть дело? Кстати, тоже самое происходит и с самой базой. В общем, чтобы odbc_connect сработала нормально, получается, что и "Файл рабочих групп" и сама база, должны находиться на локальном компе. Но я так не могу сделать. База должна остаться там, где она есть. А я должен до нее достучаться удаленно через ODBC и выложить небольшую инфу из базы в инет на страницу сайта. Не могу понять, почему не пашет. В настройках ODBC можно нормально указать все пути к удаленным файлам базы. Но после этого не пашет. На локальном компе все пашет.

На локальном компе стоит:
Операционка WinXP-SP2
Microsoft Access 97
PHP v5.2.3
ODBC v3.5
Appserver v2.5.5

На удаленном компе, стоит "двухтысячный" сервак.
Я было подумал, что может что-то с доступом не пашет и с политикой безопасности. Но я переносил базы и на обычный комп, под операционкой Win 98 и на винчестер под FAT32. Там так же не пашет. Уже весь извелся, не пойму в чем дело. :( Складывается такое впечатление, что ОДБС вообще не может работать с удаленными базами. Но ведь это не так. Это должно пахать по любому. Помогите, плиииз!

-~{}~ 17.01.08 10:30:

Усе, проблема решена! Ура товарищи!

Все таки я нашел текстовку по своему вопросу:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=251&page=560
Там самый нижний пост. Кому лень туда ломится, то вот дословный копирайт того поста:
"Как я понимаю работаем под виндаками. Нажимаем Ctrl+Alt+Del, выбираем диспетчер задач и смотрим на процесс Apache. И видим что запущен он от имени SYSTEM, а не от вашего. Так что к сетевым ресурсам дойти и не можем. Так что лечим это запуском процесса от нужного имени."

Запустил я Апач от имени пользователя и все стало пахать на ура.

Правда осталась одна засада. ODBC коннект к базе нужно расписывать вручную в программном коде таким образом:
Odbc_Connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=//server/work/baza/mybaza.mdb; systemdb=//server/work/baza/system.mda", "имя пользователя", "пароль") or Die("Не могу соединиться с базой");

Если все тоже самое сделать через виндовый "Администратор ODBC", то пахать все равно не будет. Администратор делает у себя пути через название дисков. То есть таким образом:
"Z:\work\baza"
а мне нужно чтобы путь был сетевой, без буквы диска, и с обратными слешами:
"//server/work/baza/"

Вот еще пример поясняющий эту новую засаду.
Имеем подключенный к компу сетевой диск "Z:\work\baza". Это полный аналог сетевого пути "//server/work/baza/"
Пишем простейший программный код в PHP на открытие удаленного каталога. Без всяких ODBC. Чтобы можно было просто проверить, пашет или не пашет:
OpenDir("Z:\work\baza"); //выдает ошибку
OpenDir("//server/work/baza/"); //ошибки нет

Вот и мой новый вопрос. Что я делаю не так? По любому нельзя будет воспользоваться виндовым "Администратором ODBC" для подключения сетевых ресурсов , или все же можно как-то? Повторюсь, засада теперь осталась лишь с правильным написание путей к сетевым ресурсам. Может за этот момент отвечает какая-то отдельная настройка самого интерфейса PHP?
 

TutanXamoN

Новичок
Xaoc
В чём проблема?
Создай на машине с базой скриптик который принимает запрос парсит и выдает результат, и с юникса к нему обращайся.

-~{}~ 07.02.08 12:46:

SlavikSG
Многа букафф - ет раз.

Повторюсь, засада теперь осталась лишь с правильным написание путей к сетевым ресурсам. Может за этот момент отвечает какая-то отдельная настройка самого интерфейса PHP?
Проблема скорее всего в том что:
OpenDir("//server/work/baza/"); ето сетевой путь
OpenDir("Z:\work\baza"); ето виндузный линк на тот же путь

Что мешает обращаться к сетевому ресурсу по его имени?

-~{}~ 07.02.08 12:47:

ЗЫ: Надо попадать мышом по ссылкам или хотя бы смотреть дату топикстарта)
 

SlavikSG

Новичок
Проблема скорее всего в том что:
OpenDir("//server/work/baza/"); ето сетевой путь
OpenDir("Z:\work\baza"); ето виндузный линк на тот же путь
Я же написал. Все вылечилось сразу после прочтения этой текстовушки, найденной в инете:
"Как я понимаю работаем под виндаками. Нажимаем Ctrl+Alt+Del, выбираем диспетчер задач и смотрим на процесс Apache. И видим что запущен он от имени SYSTEM, а не от вашего. Так что к сетевым ресурсам дойти и не можем. Так что лечим это запуском процесса от нужного имени."

И пути, конечно, тоже правильно писать нужно. Но пока Апач не был перезапущен от имени пользователя, никакие правильные пути и косые не помогали.
 
Сверху