Подключение 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 answers
Вы рассматривали возможность подключения к серверу с помощью unixODBC? Если я правильно помню, он поддерживает IBM DB2 и компилируется в OpenBSD. Проверьте http://www.php.net/odbc для получения дополнительной информации о стороне PHP.
Если вы не можете заставить это работать, возможно, все, что вы можете сделать, - это настроить веб-службу на сервере Linux.
Вместо того, чтобы устанавливать 2-й блок, почему бы вам не заглянуть в PHP-коннектор для iSeries? Мои ребята из мэйнфрейма сказали, что здесь очень легко настроить наши iSeries.
Мы написали простой сервер на PHP, который загружает модели данных из данных DB2, сериализует их и возвращает вызывающему. Этот подход означает, что только другое PHP-приложение может использовать сервис, но на обоих концах намного быстрее просто сериализовать объект и отправить его по каналу.
Вот PDF-файл из IBM по этому вопросу: http://i-seriesusergroup.org/wp-content/uploads/2006/09/PHP%20for%20i5OS%20NESDND.pdf
Чтобы поддержать @John Downey, я получил возможность работать с PHP на AS/400 с unixODBC.
Проверьте свой phpinfo(), чтобы узнать, доступен ли в нем unixODBC. Мне не нужно было компилировать его в SLES 10.
Похоже, что веб-сервис станет для меня ответом. В производственной коробке я бы предпочел не проходить компиляцию и поддержку моей собственной специальной установки PHP, поскольку поддержка ODBC должна быть скомпилирована в соответствии с документацией PHP.
Веб-сервис - это почти наверняка правильный путь. Я уверен, что вы уже думали об этом, но, поскольку вы используете PHP с обеих сторон, вы можете немного сократить время, используя serialize() для создания данных ответа вместо создания правильного XML-документа. Он менее гибок в долгосрочной перспективе, но, вероятно, поможет вам быстрее встать и начать работать.
Действительно, веб-сервис кажется отличным способом решения проблемы. Одним из способов избежать полностью отдельной ОС для этого было бы написать веб-сервис на Java поверх инструментов AS400 для Java (которые, кстати, довольно хороши). Это, по крайней мере, должно позволить вам запустить свой уровень обслуживания и в окне OpenBSD.
Вы также можете подключиться напрямую, используя стандартный драйвер ODBC. Версия IBM обычно предоставляет вам больше возможностей, таких как возможность вызывать программы и тому подобное. Если вам нужны только SQL и хранимые процедуры, ODBC должен работать.
Почему бы не использовать PDO из PHP? Я должен догадаться здесь, так как я не смог найти общедоступный список всех портов, доступных для OpenBSD, но так как есть порт для FreeBSD, NetBSD и т.д. Может быть, вам тоже повезет.
(Я полагаю, что, хотя OpenBSD ссылается на руководство портера FreeBSD, Freshports неприменим для вашей системы?)
Если PDO недоступен, и так как я надеюсь, что вы используете порты, и по следующей ссылке есть php5-ODBC доступно:
Итак, предполагая, что вы управляете своей системой через порты, есть ваши указатели.
Надеюсь, это поможет!