1--TEST-- 2Test session_set_save_handler() function: interface wrong 3--INI-- 4session.save_handler=files 5session.name=PHPSESSID 6--SKIPIF-- 7<?php include('skipif.inc'); ?> 8--FILE-- 9<?php 10 11ob_start(); 12 13/* 14 * Prototype : bool session_set_save_handler(SessionHandlerInterface $handler [, bool $register_shutdown_function = true]) 15 * Description : Sets user-level session storage functions 16 * Source code : ext/session/session.c 17 */ 18 19echo "*** Testing session_set_save_handler() function: interface wrong ***\n"; 20 21interface MySessionHandlerInterface { 22 public function open($path, $name); 23 public function close(); 24 public function read($id); 25 public function write($id, $data); 26 public function destroy($id); 27 public function gc($maxlifetime); 28} 29 30class MySession2 implements MySessionHandlerInterface { 31 public $path; 32 33 public function open($path, $name) { 34 if (!$path) { 35 $path = sys_get_temp_dir(); 36 } 37 $this->path = $path . '/u_sess_' . $name; 38 return true; 39 } 40 41 public function close() { 42 return true; 43 } 44 45 public function read($id) { 46 return @file_get_contents($this->path . $id); 47 } 48 49 public function write($id, $data) { 50 echo "Unsupported session handler in use\n"; 51 } 52 53 public function destroy($id) { 54 @unlink($this->path . $id); 55 } 56 57 public function gc($maxlifetime) { 58 foreach (glob($this->path . '*') as $filename) { 59 if (filemtime($filename) + $maxlifetime < time()) { 60 @unlink($filename); 61 } 62 } 63 return true; 64 } 65} 66 67function good_write($id, $data) { 68 global $handler; 69 echo "good handler writing\n"; 70 return file_put_contents($handler->path . $id, $data); 71} 72 73$handler = new MySession2; 74 75$ret = session_set_save_handler(array($handler, 'open'), array($handler, 'close'), 76 array($handler, 'read'), 'good_write', array($handler, 'destroy'), array($handler, 'gc')); 77 78var_dump($ret); 79$ret = session_set_save_handler($handler); 80var_dump($ret); 81 82session_start(); 83 84--EXPECTF-- 85*** Testing session_set_save_handler() function: interface wrong *** 86bool(true) 87 88Warning: session_set_save_handler() expects parameter 1 to be SessionHandlerInterface, object given in %s 89bool(false) 90good handler writing 91