PHP V7 is here!!! 64-bit support in PHP is here!!!! (See http://halls-of-valhalla.org/beta/news/from-php-5-to-7,146/ for what happened to PHP V6). This is a port of PHP V7.0.17 for VMS and the files herein are intended as a replacement for the files installed by the HP CSWS_PHP V2.x kit. Note that you should probably delete all of the PHP_*.EXE files from PHP_ROOT:[EXTENSIONS] before copying the files from this kit in order to prevent trying to use any of them with this kit. They are linked to the wrong PHPSHR and will not work with this kit. The following VMS-specific changes have been made compared to previous kits: This kit follows the default Unix model of building everything into a single image. There are no longer any dynamically loaded modules, everything is built into PHPSHR. Make certain that your PHP.INI file contains no extension= statements when using this kit. The OpenVMS extension now uses DECC$TRANSLATE_VMS when translating VMS names to Unix. Among other things, this means the filename being translated does not need to exist. Note that translations in the opposite direction still require the filename to exist. The mcrypt_create_iv function now recognizes MCRYPT_DEV_RANDOM and MCRYPT_DEV_URANDOM as valid sources. An updated PHP_OPENVMS.PHP file is included which provides examples of all the interfaces to VMS that have been implemented so far. Note: It was necessary to formally mark some parameters in the openvms_getsyi and openvms_getjpi functions as pass-by-reference. These parameters, if used, must now be a variable - they can no longer be a literal. See PHP --rf openvms_getsyi or PHP --rf openvms_getjpi for the parameters in question. At long last, thanks to the efforts of Bill Pedersen, the IA64 version of PHP now includes the OCI8 interface to Oracle. Unfortunately, we do not have access to any Alpha libraries that would allow providing the same support on that platform. At longer last, PHP now uses a platform-independent means for determining support for 64-bit integers. PHP 7 is the first release of PHP to be able to support 64-bit integers on VMS. When upgrading, remember this: PHP 5 on VMS is always 32-bit. PHP 7 is 64-bit. This kit now includes a Zend extension called PHP_OPCACHE. This extension keeps a copy of each PHP file in shared memory after it has been translated into tokens. This reduces the load on the server and improves performance of the web page. See http://php.net/manual/en/book.opcache.php for details. PHP.EXE and PHP_CGI.EXE are command line interfaces to PHP. PHP.EXE implements the CLI interface and makes use of Readline if invoked with the -a switch. PHP_CGI.EXE implements the CGI interface. PHPDBG.EXE is a command line interface that allows for the debugging of PHP scripts. See http://phpdbg.com/docs for documentation. The PHP.EXE, PHP_CGI.EXE, PHPDBG.EXE, and PHPWASD.EXE executables define the following DECC feature logicals in order to make the C environment reflect what PHP expects: DECC$ARGV_PARSE_STYLE DECC$EFS_CHARSET DECC$EFS_CASE_SPECIAL DECC$ENABLE_GETENV_CACHE DECC$POSIX_SEEK_STREAM_FILE DECC$FILE_SHARING DECC$STDIO_CTX_EOL DECC$ACL_ACCESS_CHECK DECC$ALLOW_REMOVE_OPEN_FILES DECC$READDIR_DROPDOTNOTYPE DECC$FILE_PERMISSION_UNIX The same feature logicals should be set in the appropriate command file for Apache as well. Other feature logicals, e.g. DECC$GLOB_UNIX_STYLE, might need to be set depending on local requirements. Remember, most PHP packages expects just about everything to use UNIX syntax, not VMS, for file specifications. If you make use of the $_ENV variable (not common) it will now contain a copy of your entire environment, i.e. DECC environment variables, DCL symbols, and the equivalent of the output of the SHOW LOGICAL command. $_ENV is populated only if the INI variable "variables_order" contains an E. Try the following for fun: $ php -d variables_order=E -r "print_r($_ENV);" For mysql users, note that PHP 5.5+ uses the mysqlnd library and no longer depends on any mysql client libraries. This makes the PHP interface to MySQL more stable than any previous port. For example, phpmyadmin is now rock solid whether it is managing a MySQL database on the local host or on another host. Note: Beginning with PHP 7 the MySQL extension is no longer supported. Code must use either the MySQLi or PDO_MySQL extensions. Other extensions no longer included with PHP 7 are: ereg, mssql, and sybase_ct If you use Multinet and a MySQL server on the local host, setting the kernel variable LO_REDUCEBY to zero will significantly improve your MySQL performance. To use the OPENSSL extension (or anything that calls it, such as FTP) you must define the logical name OPENSSL_CONF to point to your OpenSSL configuration file. A typical value to use on VMS systems would be to assign it to SSL$ROOT:[000000]OPENSSL.CNF (assuming you have the HP SSL kit installed, which is true for all recent versions of VMS). Note that, as of recent versions of OpenSSL such as the one built into this image of PHP, OpenSSL will, by default, try to validate the certificate of the server whenever you try to open a secure connection as a client. This means you must have a copy of all of the Certificate Authorities (CA) you are willing to trust. If this is not already set up on your system, one way to accomplish this is as follows: 1. Fetch the file cacert.pem from http://curl.haxx.se/docs/caextract.html (this file is a copy of the trusted CAs that Mozilla uses) 2. Place this file in a directory that can be read by PHP from within your web server (somewhere within PHP_ROOT would be one choice). 3. Edit PHP.INI in the [openssl] section and assign the variable openssl.cafile the location of this file in Unix syntax. (e.g. openssl.cafile=/php_root/cacert.pem) -------- For WASD: DEST_DIR = HT_ROOT:[PHP.IA64.BIN] for versions of WASD prior to 10.0 DEST_DIR = WASD_ROOT:[PHP.IA64.BIN] for versions prior to 10.3 DEST_DIR = WASD_ROOT:[PHP.IA64] for all versions since February, 2014 $ COPY PHP.EXE,PHP_CGI.EXE,PHPDBG.EXE,PHPSHR.EXE DEST_DIR:*.*; $ DELETE WASD_ROOT:[PHP.IA64.EXTENSIONS]PHP_*.EXE;* !if it exists $ COPY PHP_OPCACHE.EXE WASD_ROOT:[PHP.IA64.EXTENSIONS]*.*; $ COPY PHPWASD.EXE CGI_EXE:*.*; ! or wherever your map file references it Note: because the interface structure used by PHPWASD to talk to PHP changes for each major version of PHP, you must use this copy of PHPWASD.EXE. The one distributed in the PHPWASD kit may not work. -------- For APACHE: $ COPY PHP.EXE,PHP_CGI.EXE,PHPDBG.EXE,PHPSHR.EXE APACHE$COMMON:[PHP.BIN]*.*; $ DELETE APACHE$COMMON:[PHP.EXTENSIONS]PHP_*.EXE;* $ COPY PHP_OPCACHE.EXE APACHE$COMMON:[PHP.EXTENSIONS]*.*; $ COPY MOD_PHP_APACHE*.EXE APACHE$COMMON:[MODULES]*.*; -------- Final notes: Make sure the copied files end up with the same file protections as the files that were originally there. If your web server was running at the time you copied the files, you will likely need to issue the appropriate restart command to the web server to eliminate any cached PHP engines already running. I have included a copy of the PHP.INI files from the PHP sources in case you need a more up-to-date copy of this file.