1--TEST--
2Test ftruncate() function : usage variations - truncate filesize to zero
3--SKIPIF--
4<?php
5if (substr(PHP_OS, 0, 3) != 'WIN') {
6    die('skip.. only valid for Windows');
7}
8?>
9--FILE--
10<?php
11// include common file related test functions
12include ("file.inc");
13
14echo "*** Testing ftruncate() : usage variations ***\n";
15
16/* test ftruncate with file opened in different modes */
17$file_modes = array("r", "rb", "rt", "r+", "r+b", "r+t",
18                    "w", "wb", "wt", "w+", "w+b", "w+t",
19                    "x", "xb", "xt", "x+", "x+b", "x+t",
20                    "a", "ab", "at", "a+", "a+b", "a+t");
21
22$file_content_types = array("numeric","text_with_new_line");
23
24foreach($file_content_types as $file_content_type) {
25 echo "\n-- Testing ftruncate() with file having data of type ". $file_content_type ." --\n";
26
27 for($mode_counter = 0; $mode_counter < count($file_modes); $mode_counter++) {
28   echo "-- Testing ftruncate() with file opening using $file_modes[$mode_counter] mode --\n";
29
30   // create 1 file with some contents
31   $filename = __DIR__."/ftruncate_variation1私はガラスを食べられます1.tmp";
32   if( strstr($file_modes[$mode_counter], "x") || strstr($file_modes[$mode_counter], "w") ) {
33     // fopen the file using the $file_modes
34     $file_handle = fopen($filename, $file_modes[$mode_counter]);
35     fill_file($file_handle, $file_content_type, 1024);
36   } else {
37     create_files ( __DIR__, 1, $file_content_type, 0755, 1, "w", "ftruncate_variation1私はガラスを食べられます");
38     // fopen the file using the $file_modes
39     $file_handle = fopen($filename, $file_modes[$mode_counter]);
40   }
41   if (!$file_handle) {
42     echo "Error: failed to open file $filename!\n";
43     exit();
44   }
45
46   rewind($file_handle); // file pointer to 0
47
48   /* truncate it to size 0 */
49   echo "-- Testing ftruncate(): truncate file to size = 0 --\n";
50   $new_size = 0;
51   var_dump( filesize($filename) ); // check the current file size
52   var_dump( ftell($file_handle) );
53   var_dump( ftruncate($file_handle, $new_size) ); // truncate it
54   var_dump( ftell($file_handle) );
55   var_dump( feof($file_handle) );
56   fclose($file_handle);
57   clearstatcache(); // clear previous size value in cache
58   var_dump( filesize($filename) ); // check the file size, should be 0
59
60   //delete all files created
61   delete_file($filename);
62 } //end of inner for loop
63}//end of outer foreach loop
64echo "Done\n";
65?>
66--EXPECT--
67*** Testing ftruncate() : usage variations ***
68
69-- Testing ftruncate() with file having data of type numeric --
70-- Testing ftruncate() with file opening using r mode --
71-- Testing ftruncate(): truncate file to size = 0 --
72int(1024)
73int(0)
74bool(false)
75int(0)
76bool(false)
77int(1024)
78-- Testing ftruncate() with file opening using rb mode --
79-- Testing ftruncate(): truncate file to size = 0 --
80int(1024)
81int(0)
82bool(false)
83int(0)
84bool(false)
85int(1024)
86-- Testing ftruncate() with file opening using rt mode --
87-- Testing ftruncate(): truncate file to size = 0 --
88int(1024)
89int(0)
90bool(false)
91int(0)
92bool(false)
93int(1024)
94-- Testing ftruncate() with file opening using r+ mode --
95-- Testing ftruncate(): truncate file to size = 0 --
96int(1024)
97int(0)
98bool(true)
99int(0)
100bool(false)
101int(0)
102-- Testing ftruncate() with file opening using r+b mode --
103-- Testing ftruncate(): truncate file to size = 0 --
104int(1024)
105int(0)
106bool(true)
107int(0)
108bool(false)
109int(0)
110-- Testing ftruncate() with file opening using r+t mode --
111-- Testing ftruncate(): truncate file to size = 0 --
112int(1024)
113int(0)
114bool(true)
115int(0)
116bool(false)
117int(0)
118-- Testing ftruncate() with file opening using w mode --
119-- Testing ftruncate(): truncate file to size = 0 --
120int(1024)
121int(0)
122bool(true)
123int(0)
124bool(false)
125int(0)
126-- Testing ftruncate() with file opening using wb mode --
127-- Testing ftruncate(): truncate file to size = 0 --
128int(1024)
129int(0)
130bool(true)
131int(0)
132bool(false)
133int(0)
134-- Testing ftruncate() with file opening using wt mode --
135-- Testing ftruncate(): truncate file to size = 0 --
136int(1024)
137int(0)
138bool(true)
139int(0)
140bool(false)
141int(0)
142-- Testing ftruncate() with file opening using w+ mode --
143-- Testing ftruncate(): truncate file to size = 0 --
144int(1024)
145int(0)
146bool(true)
147int(0)
148bool(false)
149int(0)
150-- Testing ftruncate() with file opening using w+b mode --
151-- Testing ftruncate(): truncate file to size = 0 --
152int(1024)
153int(0)
154bool(true)
155int(0)
156bool(false)
157int(0)
158-- Testing ftruncate() with file opening using w+t mode --
159-- Testing ftruncate(): truncate file to size = 0 --
160int(1024)
161int(0)
162bool(true)
163int(0)
164bool(false)
165int(0)
166-- Testing ftruncate() with file opening using x mode --
167-- Testing ftruncate(): truncate file to size = 0 --
168int(1024)
169int(0)
170bool(true)
171int(0)
172bool(false)
173int(0)
174-- Testing ftruncate() with file opening using xb mode --
175-- Testing ftruncate(): truncate file to size = 0 --
176int(1024)
177int(0)
178bool(true)
179int(0)
180bool(false)
181int(0)
182-- Testing ftruncate() with file opening using xt mode --
183-- Testing ftruncate(): truncate file to size = 0 --
184int(1024)
185int(0)
186bool(true)
187int(0)
188bool(false)
189int(0)
190-- Testing ftruncate() with file opening using x+ mode --
191-- Testing ftruncate(): truncate file to size = 0 --
192int(1024)
193int(0)
194bool(true)
195int(0)
196bool(false)
197int(0)
198-- Testing ftruncate() with file opening using x+b mode --
199-- Testing ftruncate(): truncate file to size = 0 --
200int(1024)
201int(0)
202bool(true)
203int(0)
204bool(false)
205int(0)
206-- Testing ftruncate() with file opening using x+t mode --
207-- Testing ftruncate(): truncate file to size = 0 --
208int(1024)
209int(0)
210bool(true)
211int(0)
212bool(false)
213int(0)
214-- Testing ftruncate() with file opening using a mode --
215-- Testing ftruncate(): truncate file to size = 0 --
216int(1024)
217int(0)
218bool(true)
219int(0)
220bool(false)
221int(0)
222-- Testing ftruncate() with file opening using ab mode --
223-- Testing ftruncate(): truncate file to size = 0 --
224int(1024)
225int(0)
226bool(true)
227int(0)
228bool(false)
229int(0)
230-- Testing ftruncate() with file opening using at mode --
231-- Testing ftruncate(): truncate file to size = 0 --
232int(1024)
233int(0)
234bool(true)
235int(0)
236bool(false)
237int(0)
238-- Testing ftruncate() with file opening using a+ mode --
239-- Testing ftruncate(): truncate file to size = 0 --
240int(1024)
241int(0)
242bool(true)
243int(0)
244bool(false)
245int(0)
246-- Testing ftruncate() with file opening using a+b mode --
247-- Testing ftruncate(): truncate file to size = 0 --
248int(1024)
249int(0)
250bool(true)
251int(0)
252bool(false)
253int(0)
254-- Testing ftruncate() with file opening using a+t mode --
255-- Testing ftruncate(): truncate file to size = 0 --
256int(1024)
257int(0)
258bool(true)
259int(0)
260bool(false)
261int(0)
262
263-- Testing ftruncate() with file having data of type text_with_new_line --
264-- Testing ftruncate() with file opening using r mode --
265-- Testing ftruncate(): truncate file to size = 0 --
266int(1024)
267int(0)
268bool(false)
269int(0)
270bool(false)
271int(1024)
272-- Testing ftruncate() with file opening using rb mode --
273-- Testing ftruncate(): truncate file to size = 0 --
274int(1024)
275int(0)
276bool(false)
277int(0)
278bool(false)
279int(1024)
280-- Testing ftruncate() with file opening using rt mode --
281-- Testing ftruncate(): truncate file to size = 0 --
282int(1024)
283int(0)
284bool(false)
285int(0)
286bool(false)
287int(1024)
288-- Testing ftruncate() with file opening using r+ mode --
289-- Testing ftruncate(): truncate file to size = 0 --
290int(1024)
291int(0)
292bool(true)
293int(0)
294bool(false)
295int(0)
296-- Testing ftruncate() with file opening using r+b mode --
297-- Testing ftruncate(): truncate file to size = 0 --
298int(1024)
299int(0)
300bool(true)
301int(0)
302bool(false)
303int(0)
304-- Testing ftruncate() with file opening using r+t mode --
305-- Testing ftruncate(): truncate file to size = 0 --
306int(1024)
307int(0)
308bool(true)
309int(0)
310bool(false)
311int(0)
312-- Testing ftruncate() with file opening using w mode --
313-- Testing ftruncate(): truncate file to size = 0 --
314int(1024)
315int(0)
316bool(true)
317int(0)
318bool(false)
319int(0)
320-- Testing ftruncate() with file opening using wb mode --
321-- Testing ftruncate(): truncate file to size = 0 --
322int(1024)
323int(0)
324bool(true)
325int(0)
326bool(false)
327int(0)
328-- Testing ftruncate() with file opening using wt mode --
329-- Testing ftruncate(): truncate file to size = 0 --
330int(1137)
331int(0)
332bool(true)
333int(0)
334bool(false)
335int(0)
336-- Testing ftruncate() with file opening using w+ mode --
337-- Testing ftruncate(): truncate file to size = 0 --
338int(1024)
339int(0)
340bool(true)
341int(0)
342bool(false)
343int(0)
344-- Testing ftruncate() with file opening using w+b mode --
345-- Testing ftruncate(): truncate file to size = 0 --
346int(1024)
347int(0)
348bool(true)
349int(0)
350bool(false)
351int(0)
352-- Testing ftruncate() with file opening using w+t mode --
353-- Testing ftruncate(): truncate file to size = 0 --
354int(1137)
355int(0)
356bool(true)
357int(0)
358bool(false)
359int(0)
360-- Testing ftruncate() with file opening using x mode --
361-- Testing ftruncate(): truncate file to size = 0 --
362int(1024)
363int(0)
364bool(true)
365int(0)
366bool(false)
367int(0)
368-- Testing ftruncate() with file opening using xb mode --
369-- Testing ftruncate(): truncate file to size = 0 --
370int(1024)
371int(0)
372bool(true)
373int(0)
374bool(false)
375int(0)
376-- Testing ftruncate() with file opening using xt mode --
377-- Testing ftruncate(): truncate file to size = 0 --
378int(1137)
379int(0)
380bool(true)
381int(0)
382bool(false)
383int(0)
384-- Testing ftruncate() with file opening using x+ mode --
385-- Testing ftruncate(): truncate file to size = 0 --
386int(1024)
387int(0)
388bool(true)
389int(0)
390bool(false)
391int(0)
392-- Testing ftruncate() with file opening using x+b mode --
393-- Testing ftruncate(): truncate file to size = 0 --
394int(1024)
395int(0)
396bool(true)
397int(0)
398bool(false)
399int(0)
400-- Testing ftruncate() with file opening using x+t mode --
401-- Testing ftruncate(): truncate file to size = 0 --
402int(1137)
403int(0)
404bool(true)
405int(0)
406bool(false)
407int(0)
408-- Testing ftruncate() with file opening using a mode --
409-- Testing ftruncate(): truncate file to size = 0 --
410int(1024)
411int(0)
412bool(true)
413int(0)
414bool(false)
415int(0)
416-- Testing ftruncate() with file opening using ab mode --
417-- Testing ftruncate(): truncate file to size = 0 --
418int(1024)
419int(0)
420bool(true)
421int(0)
422bool(false)
423int(0)
424-- Testing ftruncate() with file opening using at mode --
425-- Testing ftruncate(): truncate file to size = 0 --
426int(1024)
427int(0)
428bool(true)
429int(0)
430bool(false)
431int(0)
432-- Testing ftruncate() with file opening using a+ mode --
433-- Testing ftruncate(): truncate file to size = 0 --
434int(1024)
435int(0)
436bool(true)
437int(0)
438bool(false)
439int(0)
440-- Testing ftruncate() with file opening using a+b mode --
441-- Testing ftruncate(): truncate file to size = 0 --
442int(1024)
443int(0)
444bool(true)
445int(0)
446bool(false)
447int(0)
448-- Testing ftruncate() with file opening using a+t mode --
449-- Testing ftruncate(): truncate file to size = 0 --
450int(1024)
451int(0)
452bool(true)
453int(0)
454bool(false)
455int(0)
456Done
457