Что делать с MS Access в PHP в Unix?

Мне нужно получить данные из MS Access 2007 (файлы mdb и accdb) для веб-сайта, написанного на PHP 7. Страницы не должны быть динамическими или интерактивными. Им просто нужно представить данные, хранящиеся в базе данных.

Локальная среда разработки: Windows 7, IIS 7.5

Онлайн сервер: хостинг А2, Linux (CloudLinux Server выпуск 6.9), Apache / 2.2.34

Веб-страница ADOdb для доступа говорит «Windows Да, Unix Нет». Я предполагаю, что это означает, что я могу использовать ADOdb для подключения к Access в моей локальной среде, но не на онлайн-сервере. Я полагаю, у меня есть следующие варианты:

  • У StackOverflow есть несколько вопросов по этому вопросу (1, 2, 3) с ответами, которые дают код для подключения к Access в PHP. Хотя ответы не говорят об этом, я предполагаю, что этот код будет работать только в Windows, потому что, если бы было так просто подключиться к Access в PHP в Unix, то ADOdb сделал бы это! Так что, если я прав по этому поводу, то это нереальный вариант.
  • Руководство по PHP имеет страницу на Проблемы с базой данных в котором говорится, что PHP может получить доступ к Access, но, похоже, это применимо только к работе в Windows или к «запуску PHP на Unix-сервере и необходимости общаться с MS Access на Windows-устройстве». Таким образом, это также не дает работоспособного решения для запуска веб-сайта в сети на сервере Linux.
  • Извлеките части базы данных, необходимые для чего-то другого, к чему можно получить доступ в Unix, например, файлы CSV, и используйте это как базу данных для веб-сайта. Если я сделаю это с CSV, я полагаю, мне не нужен ADOdb, а просто использовал бы fgetcsv (). Это не элегантное решение, но, возможно, лучше всего это сделать, если в Unix нет способа получить доступ к Access напрямую. (Я мог бы использовать MySQL вместо CSV, но это кажется ненужным.)
  • Запустите страницы на моем компьютере с Windows, используя ADOdb для доступа к Access. Сохраните части страниц, которые поступают из базы данных, как отдельные файлы сегментов HTML и включают() их, когда страницы запускаются онлайн. (Сценарий может определить, в какой среде он работает, и если он локальный, получить доступ к базе данных и, если он подключен, включить () файлы сегмента HTML.)
  • Переместите онлайн-сайт с Linux на сервер Windows, чтобы PHP мог получить доступ к Access напрямую через ADOdb.
  • Преобразуйте всю базу данных из Access во что-то другое, например, в MySQL. Это не практично в настоящее время, хотя это может быть вариантом в будущем.

Правильно ли я понял мои варианты? Я перечислил их, как мне кажется, в порядке предпочтения, поэтому, если кто-то не предложит иного, думаю, я перейду к третьему (извлечение в CSV, использование fgetcsv (), без ADOdb), так как первые два не сработает

Спасибо за вашу помощь.

0

Решение

Основная проблема — это драйвер ODBC. {Microsoft Access Driver (*.mdb, *.accdb)} поставляется с Microsoft Access или Microsoft Access Database Engine, которые доступны только для Windows.

Однако существуют альтернативные драйверы ODBC, которые работают в Unix и unixODBC. Популярным открытым исходным кодом является mdbtools, который ограничен, но может быть использован для подключения доступа к PHP на Unix с использованием PDO и ODBC. Есть также коммерческие альтернативы, которые более полно представлены.

Как только вы это заработаете, не должно быть проблем с использованием драйвера ODBC в PHP. Обратите внимание, что на виртуальном хостинге это может быть невозможно.

Кроме того, вы можете использовать php-jdbc bridge с UCanAccess. Это может быть все еще с открытым исходным кодом и более полнофункциональным, чем mdbtools, но его сложнее правильно настроить.

0

Другие решения

Вам не нужно конвертировать «всю базу данных» из Access, чтобы использовать Mysql, только таблицы. Затем вы можете связать их обратно в базу данных Access с помощью коннектора MySql odbc, и, пока имена таблиц совпадают, вы даже не заметите разницы, все ваши формы, запросы и все будет работать.

После этого на вашем локальном компьютере будет запущен сервер MySql, который, если вы создадите пользователя с соответствующими правами и перенаправите порт через ваш маршрутизатор (перенаправляя трафик с порта 3306 или с любого порта, назначенного вашему серверу, на ваш компьютер), и позволит трафика через ваш брандмауэр, ваш веб-сайт может затем получить доступ, читать и писать в вашу базу данных.

Если вы хотите запросить базу данных из php, mysqli_query будет работать просто отлично. Большинство веб-сайтов, которые запускаются из данных, используют MySql, так что это решение также на будущее.

0