从linux上的php连接到MS Access远程.mdb文件

Dee*_*ele 5 php ms-access odbc jet unixodbc

我一直在挖网上几天,阅读非常古老的信息,这导致了很老的和不存在的网站,我理解,仍然需要达到我的目标.

  1. 我们在运行WindowsXP的服务器上有一个file.mdb,所以我需要将它添加到ODBC数据源.我这样做的步骤很简单,最后是"System DSN",允许访问该.mdb文件
  2. 我需要在同一台服务器上安装某种ODBC桥,这将允许我创建与此服务器的远程连接,使该桥连接到服务器ODBC DSN,并查询我的东西(找不到任何免费的ODBC桥)
  3. 在UNIX(FreeBSD)机器上,我需要安装unixODBC和php5-odbc软件包,启用与ODBC的连接(已安装)
  4. 要连接到远程ODBC并使用MS Access数据库驱动程序,我需要在.so文件中有unixODBC这样的驱动程序,它位于UNIX机器内(找不到任何免费的MS Access驱动程序)
  5. 使用PHP odbc_connect(DSN,用户,密码)连接到该服务器,在DSN中我需要提供一些连接信息和驱动程序,我需要使用它(MS Access驱动程序).

纠正我,如果我弄错了,请给我更多建议,如何实现这样的联系.

Dee*_*ele 4

最后,我找到了解决方案。

  1. 在Win服务器上设置FreeSSHd,配置连接帐户并将目录设置为1,您需要
  2. 在unix服务器上设置sshfs
  3. 使用.mdb文件挂载Win服务器目录

    sshfs {user}@:/ {unix 挂载点} -o workaround=rename,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);
Run Code Online (Sandbox Code Playgroud)
  • /usr/bin/mdb-export的路径应该是您的 mdb-export 文件的路径(find / -name "mdb-export"如果找不到您的文件,请使用 )。
  • 挂载点{unix mount point}应该是一个空文件夹(我使用/usr/home/remotemdb
  • Table {table}应该是 mdb 文件中的表名。使用命令查询mdb文件中所有可能的表mdb-tables {unix mount point}/<file>.mdb

不需要驱动程序、配置或其他东西,只需简单的 mdbtools 和对文件的访问,在本例中,通过 ssh 远程连接来实现。如果你愿意,你可以安装fuse包,来自动挂载远程目录,但这是另一个问题。

希望有人这能有所帮助。