Подключение к MS Access удаленного файла .mdb из PHP на Linux - PullRequest
5 голосов
/ 20 мая 2011

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

  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, пользователь, пароль), а в DSN мне нужно предоставить некоторую информацию о соединении и драйвер, который мне нужно использовать (драйвер MS Access).

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

Ответы [ 5 ]

4 голосов
/ 10 июня 2011

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

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

    sshfs {пользователь} @: / {точка подключения 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-export (используйте find / -name "mdb-export", если можете 'не найди своего).
  • Точка монтирования {точка монтирования unix} должна быть пустой папкой (я использовал / usr / home / remotemdb )
  • Таблица {таблица} должна быть именем таблицы внутри файла mdb.Запросите все возможные таблицы в файле mdb с помощью команды mdb-tables {unix mount point}/<file>.mdb

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

Надеюсь, кому-то это поможет.

1 голос
/ 23 мая 2011

Вы правы, если вам требуется мост ODBC-ODBC.

При OpenLInk мы ссылаемся на Многоуровневый мост ODBC-ODBC ...

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

Клиент Linux - ODBC-приложение Общий драйвер OpenLink ODBC

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

1 голос
/ 20 мая 2011

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

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

$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=/network/path/to/your/access/database.mdb", $user, $password);
0 голосов
/ 29 сентября 2015

Использовать 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);
0 голосов
/ 11 июня 2011

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

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

Драйвер ODBC для Easysoft Access

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

...