PHP Performance on IBM i: Tuesday, Dec. 10 (limited-time discount)

Update: a recording of this class is available at http://iprodeveloper.com/let-your-php-apps-fly-ibm-i-high-performance-php-demand

————-

This Tuesday, learn how to Let Your PHP applications fly on IBM i. Busy? You can attend while getting your work done, with three one-hour class segments separated by breaks.

“Our process now runs 30-50% faster, thanks to one tip from Alan’s presentation.”
—Mike Meszaros, Software Developer, Specialty Pipe & Tube

You’ll learn to quickly improve your application’s performance, including:

  • Give your app that “snap” by optimizing its front end as well as PHP
  • Configure Zend Server for performance
  • Diagnose bottlenecks
  • Leverage unique IBM i performance tools
  • Optimize DB2 and the IBM i toolkit

I’ll be there to answer your questions. What’s more, the presentation will be archived for 60 days so you can review the material afterward.

“Alan is the performance guru of PHP on IBM i. When we encountered unexpectedly slow queries and program calls, Alan showed us a configuration change that helped our application run 3x faster, creating happy users. Thanks, Alan!”
—Adam Chuk Shirley, PHP Developer, Sabel Steel Service

What: PHP on IBM i performance eLearning event
When: Tuesday, December 10, 2013: three one-hour segments with two one-hour breaks, starting 11AM and ending 4PM (ET).
Where: Online
Cost: $150 (but discounted to $99 through Friday, Dec. 6)

Details and registration: http://iprodeveloper.com/let-your-php-apps-fly-ibm-i-high-performance-php

High-performance PHP on IBM i this Tuesday (July 30, 2013)

For the first time, I’m teaching how to Let Your PHP applications fly on IBM i, including how to configure Zend Server for performance, diagnose bottlenecks, leverage unique IBM i performance tools, optimize DB2 and the IBM i toolkit, and improve performance of front-end javascript, style sheets, and the like. You’ll come away with knowledge that you can use immediately to improve your application’s performance.

I’ll be there to answer your questions. What’s more, the presentation will be archived for 60 days so you can review the material afterward.

What: PHP on IBM i performance eLearning event
When: Tuesday, July 30, 2013: three one-hour segments with two one-hour breaks, starting 11AM and ending 4PM (ET).
Where: Online
Cost: $150 (group registrations available)

Details and registration: http://iprodeveloper.com/let-your-php-apps-fly-ibm-i-high-performance-php

Questions: Get in touch with Alan

Other upcoming events from Alan:

August 22, 2013: At NESTU (user group in Fairfield, N.J.): “At ease! Relax your neck-back-shoulders at the keyboard”: A special presentation from Alan to help computer workers (such as all of us) avoid repetitive strain injury and stay poised at work. Fun and unusual.

September 9-11, 2013: COMMON Fall 2013 Conference and Expo in St. Louis, Missouri. The Premier IBM i event. I’m presenting 5 talks on PHP and web performance.

October 7, 2013: Full-day, in-depth PHP on IBM i Performance Workshop, 9:30-4PM (PT) at  ZendCon (the PHP conference). Register for both parts of this tutorial (room 6) for Oct. 7, and the full conference, which goes till Oct. 10, in Santa Clara, California. I’m presenting several talks on PHP for IBM i in addition to the full-day performance tutorial.

Alan’s event page: https://www.seidengroup.com/presentations/upcoming/

 

How to prevent Easycom from loading

Several clients have asked me how to prevent their older Easycom components from loading, now that they’ve migrated from the Easycom toolkit to the new open source IBM i Zend toolkit.

Here are instructions based on suggestions from Rod Flohr of Zend Support. These tips have worked for me on Zend Server 5.6 for IBM i and will probably work on older releases as well.

Prevent Easycom extension from being loaded by PHP

1. Go to the Zend Server administration interface in your browser: http://yourIBMi:10088/ZendServer/.

2. Navigate to the Server Setup -> Extensions tab.

3. Find Easycom on the list of extensions. If the extension is On, click the “Turn off” link on the same line to turn it off.

4. You should see this message: “The extension ‘Easycom’ will be turned off after restarting your PHP”. You don’t need to restart PHP now if you plan to do so later, at the end of “Prevent I5_COMD daemon…” (below).

5. Also look for an extension called ‘pdo_easycom,’ which you may see if you had downloaded or purchased the Easycom product directly from the vendor. If it is there, turn it off as well.

Prevent I5_COMD daemon from starting in ZENDSVR

If you see a job named I5_COMD running in the ZENDSVR subsystem, but no longer use the Easycom toolkit, you may wish to follow these steps:

STEP 1: Rename the startup program that launches I5_COMD. From a 5250 command line:

RNMOBJ OBJ(ZENDSVR/ZCCSTREACD) OBJTYPE(*PGM) NEWOBJ(ZCCSTREACX)

This renaming will “hide” I5_COMD’s startup program from Zend Server’s startup procedure. (Don’t worry—the “missing object” message is monitored—no errors.)

STEP 2: Stop and start Zend Server from the menu. From a 5250 command line:

GO ZENDSVR/ZSVMENU

Use option “2. Stop Zend Server Subsystem”

Verify that subsystem ZENDSVR has ended and that there are no jobs named ZENDSVR in the QHTTPSVR subsystem.

Next, use option “1. Start Zend Server Subsystem.”

Verify that subsystem QHTTPSVR is running and contains the usual ZENDSVR jobs. Verify that subsystem ZENDSVR is started, but without I5_COMD inside.

Which version of Zend Server for IBM i do I have?

Here is the easiest way to learn the version of Zend Server installed on an IBM i system.
[Updated December 20, 2017]

From a 5250 command line, follow these four steps:

1. GO LICPGM
2. Take option 10 (Display installed licensed programs)
3. Scroll down to the licensed program 2ZSVRPI, 6ZSVRPI, or 7PHPZND 
     (on my system, it's the last entry)
4. Read the product description,
     containing version numbers for Zend Server and PHP,
     in the form "Zend Server for IBM i [version] ( PHP [version])"

On my IBM i, I see:
7PHPZND   *INSTALLED   Zend Server for IBM i 9.1.2 ( PHP 7.1 )
so Zend Server is at 9.1.2 and PHP is 7.1.

Thanks to Zend’s Sam Pinkhasov for this tip.

Toolkit webcast tomorrow, April 5

Tomorrow I’m presenting a new webcast, New PHP Toolkit from Zend and IBM: Open Source on IBM i, as part of System i Network’s free “Virtual Conference.”

Date: Thursday, April 5
Time: 11:15am ET
Registration (free): http://tinyurl.com/new-toolkit-20120405

Other presentations in the virtual conference include Jon Paris explaining why PHP is an excellent strategic choice on IBM i, two talks on mobile technology, and more.

I invite you to watch the webcast, ask questions, and learn more about the new toolkit.

Web performance webinar today

Hope you can join me for “Web performance first aid,” a webcast for the COMMON user group. The webcast will be recorded and archived for future listenings as well.

The webcast is for COMMON members, so anyone wanting to hear it needs to join COMMON.

I based the presentation on my consulting practice that helps ensure high performance for PHP and Zend Framework applications on IBM i. Good performance is critical for customer acceptance of web sites and mobile applications.

Webcast link: http://www.common.org/index.php/webcasts/upcoming-webcasts.html

Anyone wishing to see just the slides can do that on my site: http://alanseiden.com/presentations and look for “Web performance first aid.”

PHP performance tip: disable unused extensions with Zend Server

Whenever I’m brought in to improve the performance of a PHP application, an easy change I make is to disable any PHP extensions that the application does not use. PHP extensions are code libraries written in C that add to PHP’s native functionality. Examples of popular extensions on IBM i are ibm_db2 and curl.

Boost performance by disabling unneeded extensions

I’ve noticed that Zend Server ships with most extensions enabled, presumably so that developers won’t have to see “extension not enabled” error messages. While the default configuration is fine as a starting point, developers should understand that each extension requires memory when loaded. When every bit of performance counts, it’s best to disable the unused extensions. Note: don’t disable anything till you read Several Extensions to Keep Enabled.

Managing PHP extensions

To manage extensions, Zend Server provides the “Server Setup / Extensions” tab. Each extension can be enabled or disabled with its “Turn on” or “Turn off” links. Changes do not take effect until the “Restart PHP” button is clicked.

Zend Server PHP extensions management page

Zend Server's Extensions page where PHP extensions are managed

Storage location for extension settings

Zend Server stores extension settings in a set of .INI files, one file per extension. On IBM i, the files are located in /usr/local/ZendSvr/etc/conf.d. Before making large-scale changes, you may wish to back up this folder. Then, if you discover you were overzealous in disabling extensions, you can compare the contents of conf.d with your backup to find out where you went wrong.

Several extensions to keep enabled

In addition to whatever extensions are required by a given application, I’ve found that several extensions are required by Zend Server itself. Do not disable these. So far, I’ve found that Zend Server requires these extensions to be enabled:

  • ctype
  • iconv
  • json
  • pdo_mysql
  • simplexml (used by new open source toolkit)
  • zip

If you accidentally disable an extension required by Zend Server, which you’ll discover when Zend Server fails to start properly, you must re-enable the extension in the correct .INI file and then restart Zend Server from a command line or menu. On IBM i, the command is STRTCPSVR SERVER(*HTTP) RESTART(*HTTP) HTTPSVR(ZENDSVR).

More performance tips to come

I plan to write about more techniques to improve PHP application performance, particularly on IBM i, that I’ve found to be effective in my consulting experience. Performance is a critical part of user experience that developers should not ignore. In addition to this practical need for good performance, I can speak for myself, at least, in saying I feel great satisfaction when I can take a slow application (sometimes the victim of an underpowered server) and, step by step, help it run faster and faster, till the performance is at least acceptable and sometimes quite fast. More to come.

Zend Framework webinar this Wednesday

On March 9, 2011, I’ll present a free webinar about how to create a Zend Framework project on IBM i. The webinar is at 9am PST, 12pm EST. Sign up here: http://www.zend.com/en/company/news/event/790_webinar-your-first-zend-framework-project-on-ibm-i

Here’s the complete list of my upcoming talks.

Maximize Zend Server PHP performance with Apache compression

Does your site run as quickly as it could? It’s worth your time to find out. Faster web sites sell more products, improve user satisfaction, and even rank higher in Google searches.

Note: This tip was written for IBM i but could be adapted for other platforms as well.

Benefits of Zend Server

If you have upgraded from Zend Core to Zend Server for IBM i, you have already received several performance improvements: bytecode acceleration (Zend Optimizer+), the elimination of Zend Core’s proxy web server, and configurable Data Caching. If you upgraded from Community Edition (CE) to full Zend Server, you also get monitoring, Page Caching, and Job Queue functionality.

Compression adds even more speed

IBM’s Apache web server provides an additional way to speed up your Zend Server for IBM i pages. You can compress PHP output, javascript, style sheets, and other text-based content. The compressed output will automatically be decompressed and interpreted properly by all modern web browsers. My tests show a speed improvement of 10-50% from this easy technique.

How to enable compression in 3 steps

1. Edit ZENDSVR’s Apache configuration file, located at /www/zendsvr/conf/httpd.conf. This is a simple text file, so you may choose from several editors: IBM’s HTTP Server Admin GUI at port 2001 (if *ADMIN is started), the WRKLNK/EDTF command, or your favorite text editor (I use EditPad Pro).

2. Add the following two directives to the httpd.conf’s main section:

# Load IBM i's module that performs compression
LoadModule deflate_module /QSYS.LIB/QHTTPSVR.LIB/QZSRCORE.SRVPGM

# Specify what to compress (example: php, json, css, javascript, static html)
AddOutputFilterByType DEFLATE application/x-httpd-php application/json text/css
application/x-javascript application/javascript text/html

3. Restart Zend Server using the handy Restart PHP button button or STRTCPSVR SERVER(*HTTP) RESTART(*HTTP) HTTPSVR(ZENDSVR)

Measure the improvement

I ran before-and-after tests using a sample script included with Zend Server for IBM i: http://your-server:10088/Samples/SQL_access/DB2_SQL_example.php.

Before compression: 31kb, loaded in 250ms (milliseconds). See the Firebug report below (Firebug is an optional add-on for Firefox and is not required.)

Zend Server output without compression

Without compression, this page was 31kb and loaded in 250ms

After compression: 4.4kb; loaded in 109ms. That’s only 14% of the size and 50% of the time! See the screen shot below.

after compression: only 4.4kb and loaded in 109ms

after compression: only 4.4kb and loaded in 109ms

I highly recommend that you give output compression a try. Your Zend Server for IBM i pages will fly!

For more information on browser output compression, see: http://httpd.apache.org/docs/2.0/mod/mod_deflate.html

A simple security measure

A reader recently asked me this security question:

If a user enters:
http://<my_ip>/<mydirectory>
instead of
http://<my_ip>/<mydirectory>/script.php

They get a listing of all scripts/files in that directory and they can then select and execute/run those scripts.

This is a real concern for us, any suggestions?

The solution is to turn off directory browsing in your Apache configuration. To do this, make sure your Apache configuration file (probably httpd.conf or .htaccess) includes this directive:

Options -Indexes

Note that this directive merely prevents people from discovering the names of your files. Users who already know your file names can still access them. But Options -Indexes provides an important layer of security, preventing mischief from casual users who might otherwise stumble onto your file names by accident or design.

More information: http://httpd.apache.org/docs/2.2/mod/core.html#options