1--TEST--
2Test fgetss() function : Basic functionality - read/write modes
3--SKIPIF--
4<?php
5if (substr(PHP_OS, 0, 3) != 'WIN') {
6    die('skip.. only on Windows');
7}
8?>
9--FILE--
10<?php
11error_reporting(E_ALL & ~E_DEPRECATED);
12
13/*
14 Prototype: string fgetss ( resource $handle [, int $length [, string $allowable_tags]] );
15 Description: Gets line from file pointer and strip HTML tags
16*/
17
18/* try fgetss on files which are opened in read/write modes
19    w+, w+b, w+t,
20    a+, a+b, a+t,
21    x+, x+b, x+t
22*/
23
24
25echo "*** Testing fgetss() : basic operations ***\n";
26
27/* string with html and php tags */
28$string_with_tags = <<<EOT
29<test>Testing fgetss() functions</test>
30<?php echo "this string is within php tag"; ?> {;}<{> this
31is a heredoc string. <pg>ksklnm@@$$&$&^%&^%&^%&</pg>
32<html> html </html> <?php echo "php"; ?>
33EOT;
34if(substr(PHP_OS, 0, 3) == "WIN")  {
35	$string_with_tags = str_replace("\r",'', $string_with_tags);
36}
37$filename = __DIR__."/fgetss_basic2.tmp";
38
39/* try reading the file opened in different modes of reading */
40$file_modes = array("w+","w+b", "w+t","a+", "a+b", "a+t","x+","x+b","x+t");
41
42for($mode_counter = 0; $mode_counter < count($file_modes); $mode_counter++) {
43  echo "\n-- Testing fgetss() with file opened using $file_modes[$mode_counter] mode --\n";
44
45  /* create an empty file and write the strings with tags */
46  $file_handle = fopen($filename, $file_modes[$mode_counter]);
47  fwrite($file_handle,$string_with_tags); //writing data to the file
48  if(!$file_handle) {
49    echo "Error: failed to open file $filename!\n";
50    exit();
51  }
52
53  // rewind the file pointer to beginning of the file
54  var_dump( filesize($filename) );
55  var_dump( rewind($file_handle) );
56  var_dump( ftell($file_handle) );
57  var_dump( feof($file_handle) );
58
59  /* read entire file and strip tags */
60  echo "-- fgetss() with default length, file pointer at 0 --\n";
61  var_dump( fgetss($file_handle) ); // no length and allowable tags provided, reads entire file
62  var_dump( ftell($file_handle) );
63  var_dump( feof($file_handle) );
64
65  rewind($file_handle);
66  /* read entire file and strip tags tags */
67  echo "-- fgets() with length = 30, file pointer at 0 --\n";
68  var_dump( fgetss($file_handle ,30) ); // length parameter given,not reading entire file
69  var_dump( ftell($file_handle) ); // checking file pointer position initially
70  var_dump( feof($file_handle) ); // confirm file pointer is not at eof
71
72  // close the file
73  fclose($file_handle);
74
75  // delete the file
76  unlink($filename);
77} // end of for - mode_counter
78
79echo "Done\n";
80?>
81--EXPECT--
82*** Testing fgetss() : basic operations ***
83
84-- Testing fgetss() with file opened using w+ mode --
85int(192)
86bool(true)
87int(0)
88bool(false)
89-- fgetss() with default length, file pointer at 0 --
90string(27) "Testing fgetss() functions
91"
92int(40)
93bool(false)
94-- fgets() with length = 30, file pointer at 0 --
95string(23) "Testing fgetss() functi"
96int(29)
97bool(false)
98
99-- Testing fgetss() with file opened using w+b mode --
100int(192)
101bool(true)
102int(0)
103bool(false)
104-- fgetss() with default length, file pointer at 0 --
105string(27) "Testing fgetss() functions
106"
107int(40)
108bool(false)
109-- fgets() with length = 30, file pointer at 0 --
110string(23) "Testing fgetss() functi"
111int(29)
112bool(false)
113
114-- Testing fgetss() with file opened using w+t mode --
115int(195)
116bool(true)
117int(0)
118bool(false)
119-- fgetss() with default length, file pointer at 0 --
120string(27) "Testing fgetss() functions
121"
122int(40)
123bool(false)
124-- fgets() with length = 30, file pointer at 0 --
125string(23) "Testing fgetss() functi"
126int(29)
127bool(false)
128
129-- Testing fgetss() with file opened using a+ mode --
130int(192)
131bool(true)
132int(0)
133bool(false)
134-- fgetss() with default length, file pointer at 0 --
135string(27) "Testing fgetss() functions
136"
137int(40)
138bool(false)
139-- fgets() with length = 30, file pointer at 0 --
140string(23) "Testing fgetss() functi"
141int(29)
142bool(false)
143
144-- Testing fgetss() with file opened using a+b mode --
145int(192)
146bool(true)
147int(0)
148bool(false)
149-- fgetss() with default length, file pointer at 0 --
150string(27) "Testing fgetss() functions
151"
152int(40)
153bool(false)
154-- fgets() with length = 30, file pointer at 0 --
155string(23) "Testing fgetss() functi"
156int(29)
157bool(false)
158
159-- Testing fgetss() with file opened using a+t mode --
160int(195)
161bool(true)
162int(0)
163bool(false)
164-- fgetss() with default length, file pointer at 0 --
165string(27) "Testing fgetss() functions
166"
167int(40)
168bool(false)
169-- fgets() with length = 30, file pointer at 0 --
170string(23) "Testing fgetss() functi"
171int(29)
172bool(false)
173
174-- Testing fgetss() with file opened using x+ mode --
175int(192)
176bool(true)
177int(0)
178bool(false)
179-- fgetss() with default length, file pointer at 0 --
180string(27) "Testing fgetss() functions
181"
182int(40)
183bool(false)
184-- fgets() with length = 30, file pointer at 0 --
185string(23) "Testing fgetss() functi"
186int(29)
187bool(false)
188
189-- Testing fgetss() with file opened using x+b mode --
190int(192)
191bool(true)
192int(0)
193bool(false)
194-- fgetss() with default length, file pointer at 0 --
195string(27) "Testing fgetss() functions
196"
197int(40)
198bool(false)
199-- fgets() with length = 30, file pointer at 0 --
200string(23) "Testing fgetss() functi"
201int(29)
202bool(false)
203
204-- Testing fgetss() with file opened using x+t mode --
205int(195)
206bool(true)
207int(0)
208bool(false)
209-- fgetss() with default length, file pointer at 0 --
210string(27) "Testing fgetss() functions
211"
212int(40)
213bool(false)
214-- fgets() with length = 30, file pointer at 0 --
215string(23) "Testing fgetss() functi"
216int(29)
217bool(false)
218Done
219