|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2004-09-01 16:30 UTC] alan_k@php.net
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Nov 05 00:00:02 2025 UTC |
Description: ------------ When using a custom php error handler, HTTP_Session will fail because of an Undefined index in /usr/lib/php/HTTP/Session.php at line 545 A simple fix for this would be, to check if it is empty: /** * Sets new local name * * @static * @access public * @param string New local name * @return string Previous local name */ function localName($name = null) { if(!isset($GLOBALS['__HTTP_Session_Localname'])) { $GLOBALS['__HTTP_Session_Localname'] = null; } $return = $GLOBALS['__HTTP_Session_Localname']; if (isset($name)) { $GLOBALS['__HTTP_Session_Localname'] = $name; } return $return; } After this fix is applied HTTP_Session:start will be succesfull, but HTTP_Session::setLocal will fail with an undefined index too. A fix for this method would be: function setLocal($name, $value) { $local = md5(HTTP_Session::localName()); if (!isset($_SESSION[$local])) { $_SESSION[$local] = array(); } if (!isset($_SESSION[$local][$name])) { $_SESSION[$local][$name] = null; } $return = $_SESSION[$local][$name]; if (null === $value) { unset($_SESSION[$local][$name]); } else { $_SESSION[$local][$name] = $value; } return $return; } As with the last method HTTP:Session:set: function set($name, $value) { if(!isset($_SESSION[$name])) { $_SESSION[$name] = null; } $return = $_SESSION[$name]; if (null === $value) { unset($_SESSION[$name]); } else { $_SESSION[$name] = $value; } return $return; } Reproduce code: --------------- require_once ("PEAR.php"); require_once ("HTTP/Session.php"); function php_error_handler($errno, $errstr, $errfile, $errline) { echo "$errstr in $errfile at line $errline"; exit(); } set_error_handler('php_error_handler'); HTTP_Session::start('SessionID', uniqid('MyID')); HTTP_Session::setLocal('name','value'); HTTP_Session::setLocal('name2','value'); echo "finished"; Expected result: ---------------- finished Actual result: -------------- Undefined index in /usr/lib/php/HTTP/Session.php at linenr