Что делать с 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 для Access написано "Windows Да, Unix Нет". Я предполагаю, что это означает, что я могу использовать ADOdb для подключения к Access в моей локальной среде, но не на онлайн-сервере. Я полагаю, у меня есть следующие варианты:
- Stackru имеет несколько вопросов по этому вопросу ( 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), так как первые два не сработает
Спасибо за вашу помощь.
2 ответа
Основная проблема - это драйвер ODBC. {Microsoft Access Driver (*.mdb, *.accdb)}
поставляется с Microsoft Access или Microsoft Access Database Engine, которые доступны только для Windows.
Однако существуют альтернативные драйверы ODBC, которые работают в Unix и unixODBC. Популярным открытым исходным кодом является mdbtools, который ограничен, но может использоваться для подключения Access к PHP в unix с использованием PDO и ODBC. Есть также коммерческие альтернативы, которые более полно представлены.
После того, как вы это заработаете, не должно быть проблем с использованием драйвера ODBC в PHP. Обратите внимание, что на виртуальном хостинге это может быть невозможно.
Кроме того, вы можете использовать мост php-jdbc с UCanAccess. Это может быть все еще с открытым исходным кодом и более полнофункциональным, чем mdbtools, но его сложнее правильно настроить.
Вам не нужно конвертировать "всю базу данных" из Access, чтобы использовать Mysql, только таблицы. Затем вы можете связать их обратно в базу данных Access с помощью коннектора MySql odbc, и, пока имена таблиц совпадают, вы даже не заметите разницы, все ваши формы, запросы и все будет работать.
После этого на вашем локальном компьютере будет запущен сервер MySql, который, если вы создадите пользователя с соответствующими правами и перенаправите порт через ваш маршрутизатор (перенаправляя трафик с порта 3306 или с любого порта, назначенного вашему серверу, на ваш компьютер), и позволит трафика через ваш брандмауэр, ваш сайт может затем получить доступ, читать и писать в вашу базу данных.
Если вы хотите запросить базу данных из php, mysqli_query будет работать просто отлично. Большинство веб-сайтов, которые запускаются из данных, используют MySql, так что это решение также на будущее.