1--TEST-- 2User streams and include() 3--INI-- 4allow_url_fopen=1 5allow_url_include=0 6--FILE-- 7<?php 8class test { 9 private $data = '<?php echo "Hello World\n";?>'; 10 private $pos; 11 12 function stream_open($path, $mode, $options, &$opened_path) 13 { 14 if (strchr($mode, 'a')) 15 $this->pos = strlen($this->data); 16 else 17 $this->po = 0; 18 19 return true; 20 } 21 22 function stream_read($count) 23 { 24 $ret = substr($this->data, $this->pos, $count); 25 $this->pos += strlen($ret); 26 return $ret; 27 } 28 29 function stream_tell() 30 { 31 return $this->pos; 32 } 33 34 function stream_eof() 35 { 36 return $this->pos >= strlen($this->data); 37 } 38 39 function stream_seek($offset, $whence) 40 { 41 switch($whence) { 42 case SEEK_SET: 43 if ($offset < $this->data && $offset >= 0) { 44 $this->pos = $offset; 45 return true; 46 } else { 47 return false; 48 } 49 break; 50 case SEEK_CUR: 51 if ($offset >= 0) { 52 $this->pos += $offset; 53 return true; 54 } else { 55 return false; 56 } 57 break; 58 case SEEK_END: 59 if (strlen($this->data) + $offset >= 0) { 60 $this->pos = strlen($this->data) + $offset; 61 return true; 62 } else { 63 return false; 64 } 65 break; 66 default: 67 return false; 68 } 69 } 70 71} 72 73stream_register_wrapper("test1", "test", STREAM_IS_URL); 74stream_register_wrapper("test2", "test"); 75echo @file_get_contents("test1://hello"),"\n"; 76@include "test1://hello"; 77echo @file_get_contents("test2://hello"),"\n"; 78@include "test2://hello"; 79?> 80--EXPECT-- 81<?php echo "Hello World\n";?> 82<?php echo "Hello World\n";?> 83Hello World 84