2008-08-03 29 views
30

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

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

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

Есть ли второй вариант, кажется, излишним, или у кого-нибудь еще есть идеи?

ответ

17

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

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

2

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

1

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

2

К второму @ Джон Рейни, я подключился к работе с PHP на AS/400 с помощью unixODBC.

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

1

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

4

Вместо того, чтобы устанавливать второй ящик, почему бы вам не взглянуть на PHP-коннектор для iSeries? Мои ребята из мэйнфрейма сказали, что здесь очень просто настроить наш iSeries.

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

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

1

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

1

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

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

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

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

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