Подключиться к удаленному файлу .mdb MS Access с php on linux

Я копаю интернет в течение нескольких дней, читая очень старую информацию, что приводит к очень старым и несуществующим сайтам, тем не менее, я понял, что нужно для достижения моей цели.

  1. У нас есть файл.mdb на сервере под управлением WindowsXP, поэтому мне нужно добавить его в источники данных ODBC. Я делаю это с помощью простых шагов, заканчивая «Системным DSN», который позволяет получить доступ к этому файлу .mdb
  2. Мне нужно установить на этом же сервере какой-то мост ODBC, который позволит мне создать удаленное соединение с этим сервером, сделав этот мост подключенным к серверам ODBC DSN и запросить мои вещи (не смог найти какой-либо свободный мост ODBC)
  3. На машине UNIX (FreeBSD) мне нужно установить пакеты unixODBC и php5-odbc, включив подключения к ODBC (уже установленному)
  4. Чтобы подключиться к удаленному ODBC и использовать драйвер базы данных MS Access, мне нужен такой драйвер для unixODBC, в .so-файле, который находится внутри машины UNIX (не удалось найти никаких бесплатных драйверов MS Access)
  5. Подключитесь к этому серверу с помощью PHP odbc_connect (DSN, user, password), а в DSN мне нужно указать некоторые сведения о подключении и драйвер, которые мне нужно использовать (драйвер MS Access).

Поправьте меня, если я ошибаюсь и, пожалуйста, дайте мне больше советов, как достичь такой связи.

Наконец, я нашел решение.

  1. Настроить на Win Server FreeSSHd , настроить учетную запись подключения и установить каталог на один, вам нужно
  2. Настройка на unix-сервере sshfs
  3. Установить сервер сервера Win с файлами .mdb

    sshfs {user} @: / {точка монтирования unix} -o обходное = переименование, allow_other

  4. Настройка на сервере unix mdbtools

Итак, я использовал код PHP по умолчанию из документов и написал этот PHP-скрипт:

$rows = $cols = array(); if (($handle = popen('/usr/bin/mdb-export {unix mount point}/{file}.mdb {table} 2>&1', 'r')) !== FALSE) { while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { $num = count($data); if ($row == 1) { for ($c=0; $c < $num; $c++) { $cols[] = $data[$c]; } } else { for ($c=0; $c < $num; $c++) { $rows[$row][$cols[$c]] = $data[$c]; } } $row++; } pclose($handle); } print_r($rows); 
  • Путь к / usr / bin / mdb-export должен быть путь к вашему файлу экспорта mdb (используйте find / -name "mdb-export" , если вы не можете найти их).
  • Точка монтирования { точка монтирования unix} должна быть пустой папкой файла (я использовал / usr / home / remotemdb )
  • Таблица {table} должна быть именем таблицы внутри файла mdb. Запросить все возможные таблицы внутри файла mdb с помощью команды mdb-tables {unix mount point}/<file>.mdb

Нет необходимости в драйверах, конфигурации или других материалах, просто mdbtools и доступ к файлу, в этом случае достигается с помощью удаленного подключения через ssh. Вы хотите установить пакет плавких предохранителей, чтобы автоматически установить удаленный каталог, но это другой вопрос.

Надеюсь, что это поможет.

Вы не подключаетесь к «серверу dsn». DSN – это только локальная вещь. Они вообще не отображаются для удаленных подключений. Если вы хотите, чтобы машина подключалась к базе данных, вам необходимо настроить DSN на этом компьютере – вы не сможете использовать DSN, указанный в другом месте.

Для PHP ODBC это будет

 $connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=/network/path/to/your/access/database.mdb", $user, $password); 

Вы правы, потому что вам нужен ODBC для ODBC Bridge.

В OpenLInk мы ссылаемся на многоуровневый ODBC на мост ODBC …

Это многоуровневый интерфейс в том смысле, что он имеет архитектуру клиент / сервер следующим образом:

Linux Client – приложение ODBC OpenLink Generic ODBC Driver

Windows Server – 32-битный запрос OpenLink Брокер 32-битный агент ODBC OpenLink 32-битный Microsoft Access ODBC-драйвер (с предварительно настроенным DSN) файлом базы данных Microsoft Access.

Его коммерческий, возможно, не представляет интереса, но у Easysoft есть драйвер ODBC для Access, доступный на Most * nix. Не требуется мост. На данный момент в FreeBSD нет встроенной сборки, но я мог бы создать один для вас в понедельник, если это будет интересно.

Есть инструменты MDB с открытым исходным кодом, которые могут быть достаточно для того, что вы хотите, но в нем недостаточно функциональности.

Драйвер ODBC Easysoft Access

Инструменты MDB

Использовать PDO с MDBTools:

установить:

apt-get install libodbc1

apt-get install libmdbodbc1

apt-get install php5-odbc

(перезапустить apache)

Образец:

 $query = 'SELECT * FROM Table'; $mdb_file = 'file.mdb'; $driver = 'MDBTools'; $dataSourceName = "odbc:Driver=$driver;DBQ=$mdb_file;Uid=user;Pwd=pass;"; $connection = new \PDO($dataSourceName); $result = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC); print_r($result);