Return to fopencookie.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard / tests / file |
1.1 misho 1: --TEST-- 2: fopencookie detected and working (or cast mechanism works) 3: --FILE-- 4: <?php 5: # vim600:syn=php: 6: 7: /* This test verifies that the casting mechanism is working correctly. 8: * On systems with fopencookie, a FILE* is created around the user 9: * stream and that is passed back to the ZE to include. 10: * On systems without fopencookie, the stream is fed into a temporary 11: * file, and that temporary file is passed back to the ZE. 12: * The important thing here is really fopencookie; the glibc people 13: * changed the binary interface, so if haven't detected it correctly, 14: * you can expect this test to segfault. 15: * 16: * FIXME: the test really needs something to fseek(3) on the FILE* 17: * used internally for this test to be really effective. 18: */ 19: 20: class userstream { 21: public $position = 0; 22: public $data = "If you can read this, it worked"; 23: 24: function stream_open($path, $mode, $options, &$opened_path) 25: { 26: return true; 27: } 28: 29: function stream_read($count) 30: { 31: $ret = substr($this->data, $this->position, $count); 32: $this->position += strlen($ret); 33: return $ret; 34: } 35: 36: function stream_tell() 37: { 38: return $this->position; 39: } 40: 41: function stream_eof() 42: { 43: return $this->position >= strlen($this->data); 44: } 45: 46: function stream_seek($offset, $whence) 47: { 48: switch($whence) { 49: case SEEK_SET: 50: if ($offset < strlen($this->data) && $offset >= 0) { 51: $this->position = $offset; 52: return true; 53: } else { 54: return false; 55: } 56: break; 57: case SEEK_CUR: 58: if ($offset >= 0) { 59: $this->position += $offset; 60: return true; 61: } else { 62: return false; 63: } 64: break; 65: case SEEK_END: 66: if (strlen($this->data) + $offset >= 0) { 67: $this->position = strlen($this->data) + $offset; 68: return true; 69: } else { 70: return false; 71: } 72: break; 73: default: 74: return false; 75: } 76: } 77: function stream_stat() { 78: return array('size' => strlen($this->data)); 79: } 80: } 81: 82: stream_wrapper_register("cookietest", "userstream"); 83: 84: include("cookietest://foo"); 85: 86: ?> 87: --EXPECT-- 88: If you can read this, it worked