Backward Incompatible Changes
Changes in PHP datetime support
Migrating from PHP 5.1.x to PHP 5.2.x
PHP Manual

## New Error Messages

Below are the new error messages that have not been discussed elsewhere in this document.

Example #1 In PHP Core

`<?php
echo " ";
session_regenerate_id();
/* Warning: session_regenerate_id(): Cannot regenerate
session id - headers already sent in filename on line n */
str_word_count("string", 4);
/* Warning: str_word_count(): Invalid format value 4
in filename on line n */
strripos("foo", "f", 4);
/* Notice: strripos(): Offset is greater than the
length of haystack string in filename on line n */
strrpos("foo", "f", 4);
/* Notice: strrpos(): Offset is greater than the
length of haystack string in filename on line n */
/* As of PHP 5.2.1, when allow_url_include is OFF (default) */
include "php://input";
/* Warning: include(): URL file-access is disabled
in the server configuration in filename on line n */
?>`

Example #2 Object Oriented Code in PHP Core

`<?php
interface foo {
}
class bar implements foo, foo {
}
/* Fatal error: Class bar cannot implement previously
implemented interface foo in filename on line n */
class foo {
public $bar;
function __get($var)
{
return $this->bar;
}
}
$foo = new foo;
$bar =& $foo->prop;
/* Notice: Indirect modification of overloaded property
foo::$prop has no effect in filename on line n */
class foo implements iterator {
public function current() {
}
public function next() {
}
public function key() {
}
public function valid() {
}
public function rewind() {
}
}
$foo = new foo();
foreach($foo as &$ref) {}
/* Fatal error: An iterator cannot be used with foreach
by reference in filename on line n */
class foo {
private function __construct() {
}
}
class bar extends foo {
public function __construct() {
parent::__construct();
/* Fatal error: Cannot call private
foo::__construct() in filename on line n */
}
}
new bar;
stream_filter_register("", "class");
/* Warning: stream_filter_register(): Filter name
cannot be empty in filename on line n */
stream_filter_register("filter", "");
/* Warning: stream_filter_register(): Class name
cannot be empty in filename on line n */
?>`

Example #3 In the bzip2 Extension

`<?php
bzopen("", "w");
/* Warning: bzopen(): filename cannot be empty
in filename on line n */
bzopen("foo", "a");
/* Warning: bzopen(): 'a' is not a valid mode for
bzopen(). Only 'w' and 'r' are supported in
filename on line n */
$fp = fopen("foo", "w");
bzopen($fp, "r");
/* Warning: bzopen(): cannot read from a stream
opened in write only mode in filename on line n */
?>`

Example #4 In the datetime Extension

`<?php
strtotime("today", "now");
/* Warning: strtotime() expects parameter 2 to be
long, string given in filename on line n */
/* As of PHP 5.2.1 */
new DateTime(new stdclass);
/* Fatal error: Uncaught exception 'Exception' with
message 'DateTime::__construct() expects parameter
1 to be string, object given' in filename:n */
?>`

Example #5 In the dBase Extension

`<?php
dbase_open("foo", -1);
/* Warning: Invalid access mode -1 in filename on line n */
/* As of PHP 5.2.1 */
dbase_open("foo", null);
/* Warning: The filename cannot be empty in filename on line n */
?>`

Example #6 In the mcrypt Extension

`<?php
$key = "this is a secret key";
$td = mcrypt_module_open('tripledes', '', 'ecb', '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td),
MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$encrypted_data = mcrypt_generic($td, "");
/* Warning: mcrypt_generic(): An empty string was
passed in filename on line n */
?>`

Example #7 In the oci8 Extension

`<?php
oci_connect("user", "pass", "db", "bogus_charset");
/* Warning: Invalid character set name:
bogus_charset in filename on line n */
$oci = oci_connect("user", "pass", "db");
oci_password_change($oci, "", "old", "new");
/* Warning: username cannot be empty in filename
on line n */
oci_password_change($oci, "user", "", "new");
/* Warning: old password cannot be empty in filename
on line n */
oci_password_change($oci, "user", "old", "");
/* Warning: new password cannot be empty in filename
on line n */
?>`

Example #8 In the SPL Extension

`<?php
$obj = new SplFileObject(__FILE__);
$obj->fgetcsv("foo");
/* Warning: SplFileObject::fgetcsv(): delimiter must
be a character in filename on line n */
$obj->fgetcsv(",", "foo");
/* Warning: SplFileObject::fgetcsv(): enclosure must
be a character in filename on line n */
?>`

Example #9 In the Semaphore (sysvmsg) extension

`<?php
/* Warning: maximum size of the message has to be
greater then zero in filename on line n */
?>`

Example #10 A 5.2.1+ Zip Example

`<?php
$obj = new ZipArchive();
$obj->open('archive.zip');
$obj->setCommentName('', 'comment');
/* Notice: ZipArchive::setCommentName(): Empty string
as entry name in filename on line n */
/* As of PHP 5.2.1 */
$obj->getCommentName('');
/* Notice: ZipArchive::getCommentName(): Empty string
as entry name in filename on line n */
?>`

Backward Incompatible Changes
Changes in PHP datetime support
Migrating from PHP 5.1.x to PHP 5.2.x
PHP Manual