Yes, we all have source code for many commercial applications. Once we license them, that is. How about source code for free? How great is that?
Spoiler Alert: At the end of this TechTip is the "Ultimate Solution" to PHP databases on the System i.
The PHP community of programmers has long been a bastion of the open-source movement. This business model is based on the free distribution of the code and applications. Normally, "community" support is readily available on forums via the users of the software, with a modicum of help from the authors.
The debate over the readiness of open source for enterprise use will not continue here. What we will expose is the huge benefit of learning from open source. Having a fully operational program with easily readable source code is absolutely the best way to learn a language. And if that app can do some things that you actually need done, all the better.
This author became enchanted with PHP from an open-source application, Mantis Bug Tracker, which was spearheaded by Kenzaburo Ito from 2000–2002 and then Victor Boctor since 2002. Read the details at Wikipedia. Mantis has become so popular that it's included with Debian, Ubuntu, Fedora, Gentoo, Frugalware, and several other Linux distributions.
Back in 2003, Curbstone had the need for three web-based systems for our geographically distributed developers. Speed of development, ability to customize, and rapid deployment were the priorities. We decided to take that open-source "bug-tracking" application and, using its extensive support for language customization (currently supporting 49 languages), turn it into the three flavors of tools we needed. The undertaking of customization was in late 2003 on a beta version of Mantis that was a "release candidate." In our case, at that time, we ran it on our Linux server that handled our marketing websites.
Number 1: Customer Issue Tracker
The first requirement was a bug tracker, exactly what Mantis was written to do. What we found particularly attractive was the e-mail updates that Mantis generated to the reporting customers when a tech updated the bug. We prefer, of course, to call them "issues," hence the name: Issue Tracking System (ITS). The system is also capable of segregating the issues so each customer login sees only the issues they reported.
Figure 1: Issue Tracking System (ITS)
Number 2: Internal Implementation Log
The next was an internal implementation database to collect step-by-step details of the installation, configuration, testing, and go-live process for each of our customers. This required that the primary "record" would be the Customer, so we had one record per customer, as opposed to one record per bug report. Then the time-stamped comments would be entered by our technicians to retain the valuable details of the implementation.
Figure 2: Internal Implementations Database
Number 3: Internal Software Design Change Requests
The third use was to help manage the development process by tracking Design Change Requests (DCRs). This had one design change per "record," and the techs could comment on it. The steps in the configurable life cycle would take the change from concept to code to customer.
Figure 3: Design Change Requests
Since the Mantis software used configuration files to control all of the text components of the screen, customizing the app to look like three different ones was relatively easy.
Figure 4: Life Cycle Customization for Each Flavor
The Database Challenge
The Mantis PHP application code is written on top of ADOdb, a database abstraction layer. Since PHP is often hosted on a Linux operating system, we have several high-quality, equally free, open source, relational databases from which to choose. The most popular include MySQL, Informix, ODBC, DB2, and Postgres. Were we to write an application for broad distribution as open source, we would want it to support as many independent databases as possible. And a dream come true, the ADOdb open-source effort provides that compatibility.
ADOdb is a layer of software—a database class library, specifically—that provides a powerful SQL interface for PHP programs. This SQL superset is able to translate this standardized version of SQL to any one of the flavors the end user prefers. In fact, the ADOdb team and other contributors now support about 40 databases: Access, ADO, ADO Access, ado_mssql, borland_ibase, DB2, fbsql, Firebird, iBase, Informix, Informix72, LDAP, MS SQL, mssqlpo, MySQL, MySQLi, mysqlt ormaxsql, Netezza, oci8, oci805, oci8po, ODBC, ODBC_DB2, ODBC_MS SQL, ODBC_Oracle, ODBTP, ODBTP_Unicode, Oracle, PDO, Postgres, Postgres64, Postgres7, Postgres8, Postgres9, SAP DB, SQL Anywhere, SQLite, SQLitepo, Sybase, and Visual FoxPro.
ADOdb is so well-designed that the library also works under the Python programming language.
Given our familiarity with DB2, our company was glad to join the PHP experts from Zend and IBM, along with Alan Seiden, to work on Mantis. The goal was to modify the ADOdb abstraction layer to support the particular flavor of SQL used in DB2 on the AS/400 (DB2/400), aka System i (the name you have to type twice in order to ensure the "i" stays lowercase). Prior to the 1990s, IBM produced a platform-specific version of DB2 for each major operating system.
In late 2006, we undertook to enhance ADOdb in the Mantis code to support DB2/400. And the team— including Alan Seiden (alanseiden.com), Victor Boctor (MantisBT.org), Jim Dillard and Edward Kietlinski (Zend.com), Jon Rush and John Paris (IBM), this author (Curbstone.com), and others—attacked the pre-release Mantis code. The result is posted at the Mantis400.com website.
The result was completely operational and informative, and it worked. However, we were expecting a new product from Zend that might make the effort merely a valuable technical exercise.…
The Ultimate 2014 Solution: ZendDBi
And for those of you wondering what we do to use later versions of Mantis that do not have the DB2/400 ADOdb modifications, ever-productive Zend has the perfect answer.
While modifying ADOdb to support DB2/400 might sound like a great solution, Zend did one better. Instead of leaving the System i database "non-standard," they created a new software layer that makes the DB2/400 look just like MySQL to PHP applications! This is now available to all V6R1 systems and higher.
This is the perfect solution to running and building PHP applications for the IBM i. It takes advantage of the storage of the data in native physical files, while the application thinks that it's using MySQL, the most popular database.
Download your free ZendDBi here and run any PHP application that uses MySQL, and store the data natively in physical files!