PHP 5.2 UPDATE INFO =============================== Changes in PHP datetime support =============================== Since PHP 5.1, there has been an extension named 'date' in the PHP core. This is the new implementation of PHP's datetime support. Although it will attempt to guess your system's timezone setting, you should set the timezone manually. You can do this in any of three ways: 1) in your php.ini using the date.timezone INI directive 2) on your system using the TZ environmental variable 3) from your script using the convenience function date_default_timezone_set() All supported timezones are listed in the PHP Manual at http://www.php.net/manual/timezones.php. With the advent of PHP 5.2, there are object representations of the date and timezone, named DateTime and DateTimeZone respectively. You can see the methods and constants available to the new classes by running php --rc DateTime php --rc DateTimeZone under PHP CLI. All methods map to existing procedural date functions. ================================== Items from the NEWS file explained ================================== - Added new error mode E_RECOVERABLE_ERROR. (Derick, Marcus, Tony) Some of the existing E_ERROR conditions have been converted to something that you can catch with a user-defined error handler. If an E_RECOVERABLE_ERROR is not handled, it will behave in the same way as E_ERROR behaves in all versions of PHP. Errors of this type are logged as 'Catchable fatal error'. - Changed E_ALL error reporting mode to include E_RECOVERABLE_ERROR. (Marcus) This change means that the value of the E_ALL error_reporting constant is now 6143, where its previous value was 2047. If you are setting the error_reporting mode from either the Apache config file or the .htaccess files, you will need to adjust the value accordingly. The same applies if you use the numeric value rather than the constant in your PHP scripts. - Added support for constructors in interfaces to force constructor signature checks in implementations. (Marcus) Starting with PHP 5.2, interfaces can have constructors. However, if you choose to declare a constructor in an interface, each class implementing that interface MUST include a constructor with a signature matching that of the base interface constructor. By 'signature' we mean the parameter and return type definitions, including any type hints and including whether the data is passed by reference or by value. - Changed __toString to be called wherever applicable. (Marcus) The magic method __toString() will now be called in a string context, that is, anywhere an object is used as a string. When implementing your __toString() method in a class, you should be aware that the script will terminate if your function throws an exception. The PHP 5.0/5.1 fallback - returning a string that contains the object identifier - has been dropped in PHP 5.2. It became problematic because an object identifier cannot be considered unique. This change will mean that your application is flawed if you have relied on the object identifier as a return value. An attempt to use that value as a string will now result in a catchable fatal error (see above). Even with __toString(), objects cannot be used as array indices or keys. We may add built-in hash support for this at a later date, but for PHP 5.2 you will need to either provide your own hashing or use the new SPL function spl_object_hash(). - Added RFC2397 (data: stream) support. (Marcus) The introduction of the 'data' URL scheme has the potential to lead to a change of behaviour under Windows. If you are working with an NTFS filesystem and making use of meta streams in your application, and if you just happen to be using a file with the name 'data:' that is accessed without any path information - it won't work any more. The fix is to use the 'file:' protocol when accessing it. There is information about the RFC at http://www.faqs.org/rfcs/rfc2397.html. - Added allow_url_include ini directive to complement allow_url_fopen. (Rasmus) This useful option makes it possible to differentiate between standard file operations on remote files, and the inclusion of remote files. While the former is usually desirable, the latter can be a security risk if used naively. Starting with PHP 5.2, you can allow remote file operations while disallowing the inclusion of remote files in local scripts. In fact, this is the default configuration. - Dropped abstract static class functions. (Marcus) Due to an oversight, PHP 5.0 and 5.1 allowed abstract static functions in classes. In PHP 5.2, only interfaces can have them. - Removed extensions (Derick, Tony) The filepro and hwapi extensions have been moved to PECL and are no longer part of the PHP distribution. The PECL package version of these extensions will be created on the basis of user demand. - Added extensions (Rasmus, Derick, Pierre) The JSON extension implements the JavaScript Object Notation (JSON) data interchange format. This extension is enabled by default. The Filter extension validates and filters data, and is designed for use with insecure data such as user input. This extension is enabled by default; the default mode RAW does not impact input data in any way. The Zip extension enables you to transparently read or write ZIP compressed archives and the files inside them. Please refer to the PHP Manual for details. - Improved memory manager and increased default memory limit (Dmitry) The new memory manager allocates less memory and works faster than the previous incarnation. It allocates memory from the system in large blocks, and then manages the heap by itself. The memory_limit value in php.ini is checked, not for each emalloc() call (as before), but for actual blocks requested from the system. This means that memory_limit is far more accurate than it used to be, since the old memory manager didn't calculate all the memory overhead used by the malloc library. Thanks to this new-found accuracy memory usage may appear to have increased, although actually it has not. To accommodate this apparent increase, the default memory_limit setting was also increased - from 8 to 16 megabytes. - Changed priority of PHPRC environment variable on win32 (Dmitry) The PHPRC environment variable now takes priority over the path stored in the Windows registry. - Added notice when accessing return value from __get() in write mode (Marcus) The reason for this is that __get() only returns variables in read mode, and it is therefore not possible to write to the returned variable. In previous releases there was no effective way to detect incorrect usage. Starting from PHP 5.2, an E_NOTICE will be emitted in this situation. WARNING: foreach() and functions that modify the internal array pointer will now also trigger the same E_NOTICE, since modification requires that the variable be accessed in write mode. To work around this, you should either cast the returned value from __get() to an array, or use SPL's ArrayObject instead of an array. - CLI SAPI no longer checks cwd for php.ini or the php-cli.ini file (Edin) In PHP 5.1.X an undocumented feature was added that made the CLI binary check the current directory for PHP configuration file possibly leading to unpredictable behavior due to an un-expected configuration file being read. This functionality was removed in 5.2 and PHP will no longer search CWD for the presence of the php.ini or the php-cli.ini files. - Added a notice when performing modulus 0 operation (Tony) In earlier versions of PHP performing integer % 0 did not emit any warning messages, instead retuning an un-expected return value of false. As of PHP 5.2 this operation will emit E_WARNING as is the case in all other instance where division by zero is performed.