Подключите PHP к IBM i (AS / 400)

У меня есть предстоящий проект, в котором мне нужно будет подключить наш веб-сайт ( PHP5/Apache 1.3/OpenBSD 4.1 ) к нашей внутренней системе, работающей на iSeries с OS400 V5R3, чтобы я мог получить доступ к некоторым таблицам, хранящимся там. Я кое-что проверил, но наткнулся на некоторые препятствия.

Из того, что я видел, расширения DB2 и программное обеспечение DB2 от IBM работают только под Linux. Я пробовал скомпилировать расширения со всем программным обеспечением от IBM и даже безуспешно пробовал их предварительно скомпилированное расширение ibm_db2. IBM поддерживает только Linux, поэтому я включил эмуляцию Linux в ядре, но это, похоже, ничего не помогло.

Если кто-то сталкивался с тем, чтобы заставить все работать изначально под OpenBSD, это было бы здорово, но я думаю, что мне, возможно, придется настроить второй сервер под управлением CentOS с установленной DB2 (скорее всего, через ZendCore для IBM, поскольку он, похоже, все делает). это для меня) и драйвер, чтобы я мог настроить небольшой сервер транзакций, на котором я мог бы публиковать сообщения и получить JSON-представление данных DB2, которые мне нужны.

Второй вариант кажется излишним или у кого-то есть идеи получше?

Ответов (8)

Решение

Вы смотрели подключение к серверу с помощью unixODBC ? Если я правильно помню, он поддерживает IBM DB2 и компилируется на OpenBSD. Посетите http://www.php.net/odbc для получения дополнительной информации о PHP.

Если вы не можете заставить это работать, настройка веб-службы на сервере Linux может быть всем, что вы можете сделать.

Похоже, веб-сервис станет для меня ответом. В производственном ящике я бы предпочел не компилировать и поддерживать мою собственную специальную установку PHP, поскольку, согласно документации PHP, необходимо скомпилировать поддержку ODBC.

Действительно, веб-сервис кажется отличным способом решить проблему. Один из способов избежать полностью отдельной ОС - написать веб-сервис на Java поверх инструментов AS400 для Java (которые, кстати, довольно хороши). Это должно, по крайней мере, позволить вам запускать уровень обслуживания в окне OpenBSD.

Веб-сервис почти наверняка лучший вариант. Я уверен, что вы уже подумали об этом, но поскольку вы используете PHP с обеих сторон, вы можете немного сократить время, используя serialize () для создания данных ответа вместо создания правильного XML-документа. В долгосрочной перспективе он менее гибкий, но, вероятно, поможет вам быстрее начать работу.

Во-вторых, @John Downey, у меня есть возможность подключения для работы с PHP на AS / 400 с unixODBC.

Проверьте свой phpinfo (), чтобы узнать, доступен ли в нем unixODBC. Мне не нужно было компилировать его на SLES 10.

Почему бы вам не заглянуть в коннектор PHP для iSeries, вместо того, чтобы настраивать второй блок? Ребята из моих мэйнфреймов сказали, что здесь очень легко установить на нашем iSeries.

Мы написали простой сервер на PHP, который загружает модели данных из данных DB2, сериализует их и возвращает вызывающей стороне. Этот подход означает, что только другое приложение PHP может использовать службу, но это намного быстрее на обоих концах, чтобы просто сериализовать объект и отправить его по конвейеру.

Вот PDF-файл от IBM по этой теме: http://i-seriesusergroup.org/wp-content/uploads/2006/09/PHP%20for%20i5OS%20NESDND.pdf

Вы также можете подключиться напрямую, используя стандартный драйвер ODBC. Версия для IBM обычно дает вам больше возможностей, например, возможность вызывать программы и тому подобное. Если вам нужны только SQL и хранимые процедуры, ODBC должен работать.

Почему бы не использовать PDO из PHP? Я должен угадать, так как я не смог найти общедоступный список всех портов, доступных для OpenBSD, но, поскольку есть порт для FreeBSD, NetBSD и т. Д., Возможно, вам тоже повезет.

(Я предполагаю, что даже несмотря на то, что OpenBSD ссылается на руководство FreeBSD porter's, Freshports не подходит для вашей системы?)

Если PDO недоступен, и поскольку я надеюсь, что вы используете порты, и по следующей ссылке доступен php5-ODBC:

Итак, если вы управляете своей системой через порты, вот и ваши указатели.

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