1--TEST--
2Test ftruncate() function : usage variations - truncate file to half size
3--SKIPIF--
4<?php
5if (substr(PHP_OS, 0, 3) == 'WIN') {
6    die('skip.. Not 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_variation3.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_variation", 3);
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   echo "-- Testing ftruncate(): truncate file to half of its current size --\n";
49   /* truncate it to half of its current size */
50   $new_size = (int)(filesize($filename)/2);
51   var_dump( filesize($filename) );  // current filesize
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) ); // new file size = $new_size
59
60   // delete file
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 half of its current size --
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 half of its current size --
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 half of its current size --
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 half of its current size --
96int(1024)
97int(0)
98bool(true)
99int(0)
100bool(false)
101int(512)
102-- Testing ftruncate() with file opening using r+b mode --
103-- Testing ftruncate(): truncate file to half of its current size --
104int(1024)
105int(0)
106bool(true)
107int(0)
108bool(false)
109int(512)
110-- Testing ftruncate() with file opening using r+t mode --
111-- Testing ftruncate(): truncate file to half of its current size --
112int(1024)
113int(0)
114bool(true)
115int(0)
116bool(false)
117int(512)
118-- Testing ftruncate() with file opening using w mode --
119-- Testing ftruncate(): truncate file to half of its current size --
120int(1024)
121int(0)
122bool(true)
123int(0)
124bool(false)
125int(512)
126-- Testing ftruncate() with file opening using wb mode --
127-- Testing ftruncate(): truncate file to half of its current size --
128int(1024)
129int(0)
130bool(true)
131int(0)
132bool(false)
133int(512)
134-- Testing ftruncate() with file opening using wt mode --
135-- Testing ftruncate(): truncate file to half of its current size --
136int(1024)
137int(0)
138bool(true)
139int(0)
140bool(false)
141int(512)
142-- Testing ftruncate() with file opening using w+ mode --
143-- Testing ftruncate(): truncate file to half of its current size --
144int(1024)
145int(0)
146bool(true)
147int(0)
148bool(false)
149int(512)
150-- Testing ftruncate() with file opening using w+b mode --
151-- Testing ftruncate(): truncate file to half of its current size --
152int(1024)
153int(0)
154bool(true)
155int(0)
156bool(false)
157int(512)
158-- Testing ftruncate() with file opening using w+t mode --
159-- Testing ftruncate(): truncate file to half of its current size --
160int(1024)
161int(0)
162bool(true)
163int(0)
164bool(false)
165int(512)
166-- Testing ftruncate() with file opening using x mode --
167-- Testing ftruncate(): truncate file to half of its current size --
168int(1024)
169int(0)
170bool(true)
171int(0)
172bool(false)
173int(512)
174-- Testing ftruncate() with file opening using xb mode --
175-- Testing ftruncate(): truncate file to half of its current size --
176int(1024)
177int(0)
178bool(true)
179int(0)
180bool(false)
181int(512)
182-- Testing ftruncate() with file opening using xt mode --
183-- Testing ftruncate(): truncate file to half of its current size --
184int(1024)
185int(0)
186bool(true)
187int(0)
188bool(false)
189int(512)
190-- Testing ftruncate() with file opening using x+ mode --
191-- Testing ftruncate(): truncate file to half of its current size --
192int(1024)
193int(0)
194bool(true)
195int(0)
196bool(false)
197int(512)
198-- Testing ftruncate() with file opening using x+b mode --
199-- Testing ftruncate(): truncate file to half of its current size --
200int(1024)
201int(0)
202bool(true)
203int(0)
204bool(false)
205int(512)
206-- Testing ftruncate() with file opening using x+t mode --
207-- Testing ftruncate(): truncate file to half of its current size --
208int(1024)
209int(0)
210bool(true)
211int(0)
212bool(false)
213int(512)
214-- Testing ftruncate() with file opening using a mode --
215-- Testing ftruncate(): truncate file to half of its current size --
216int(1024)
217int(0)
218bool(true)
219int(0)
220bool(false)
221int(512)
222-- Testing ftruncate() with file opening using ab mode --
223-- Testing ftruncate(): truncate file to half of its current size --
224int(1024)
225int(0)
226bool(true)
227int(0)
228bool(false)
229int(512)
230-- Testing ftruncate() with file opening using at mode --
231-- Testing ftruncate(): truncate file to half of its current size --
232int(1024)
233int(0)
234bool(true)
235int(0)
236bool(false)
237int(512)
238-- Testing ftruncate() with file opening using a+ mode --
239-- Testing ftruncate(): truncate file to half of its current size --
240int(1024)
241int(0)
242bool(true)
243int(0)
244bool(false)
245int(512)
246-- Testing ftruncate() with file opening using a+b mode --
247-- Testing ftruncate(): truncate file to half of its current size --
248int(1024)
249int(0)
250bool(true)
251int(0)
252bool(false)
253int(512)
254-- Testing ftruncate() with file opening using a+t mode --
255-- Testing ftruncate(): truncate file to half of its current size --
256int(1024)
257int(0)
258bool(true)
259int(0)
260bool(false)
261int(512)
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 half of its current size --
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 half of its current size --
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 half of its current size --
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 half of its current size --
290int(1024)
291int(0)
292bool(true)
293int(0)
294bool(false)
295int(512)
296-- Testing ftruncate() with file opening using r+b mode --
297-- Testing ftruncate(): truncate file to half of its current size --
298int(1024)
299int(0)
300bool(true)
301int(0)
302bool(false)
303int(512)
304-- Testing ftruncate() with file opening using r+t mode --
305-- Testing ftruncate(): truncate file to half of its current size --
306int(1024)
307int(0)
308bool(true)
309int(0)
310bool(false)
311int(512)
312-- Testing ftruncate() with file opening using w mode --
313-- Testing ftruncate(): truncate file to half of its current size --
314int(1024)
315int(0)
316bool(true)
317int(0)
318bool(false)
319int(512)
320-- Testing ftruncate() with file opening using wb mode --
321-- Testing ftruncate(): truncate file to half of its current size --
322int(1024)
323int(0)
324bool(true)
325int(0)
326bool(false)
327int(512)
328-- Testing ftruncate() with file opening using wt mode --
329-- Testing ftruncate(): truncate file to half of its current size --
330int(1024)
331int(0)
332bool(true)
333int(0)
334bool(false)
335int(512)
336-- Testing ftruncate() with file opening using w+ mode --
337-- Testing ftruncate(): truncate file to half of its current size --
338int(1024)
339int(0)
340bool(true)
341int(0)
342bool(false)
343int(512)
344-- Testing ftruncate() with file opening using w+b mode --
345-- Testing ftruncate(): truncate file to half of its current size --
346int(1024)
347int(0)
348bool(true)
349int(0)
350bool(false)
351int(512)
352-- Testing ftruncate() with file opening using w+t mode --
353-- Testing ftruncate(): truncate file to half of its current size --
354int(1024)
355int(0)
356bool(true)
357int(0)
358bool(false)
359int(512)
360-- Testing ftruncate() with file opening using x mode --
361-- Testing ftruncate(): truncate file to half of its current size --
362int(1024)
363int(0)
364bool(true)
365int(0)
366bool(false)
367int(512)
368-- Testing ftruncate() with file opening using xb mode --
369-- Testing ftruncate(): truncate file to half of its current size --
370int(1024)
371int(0)
372bool(true)
373int(0)
374bool(false)
375int(512)
376-- Testing ftruncate() with file opening using xt mode --
377-- Testing ftruncate(): truncate file to half of its current size --
378int(1024)
379int(0)
380bool(true)
381int(0)
382bool(false)
383int(512)
384-- Testing ftruncate() with file opening using x+ mode --
385-- Testing ftruncate(): truncate file to half of its current size --
386int(1024)
387int(0)
388bool(true)
389int(0)
390bool(false)
391int(512)
392-- Testing ftruncate() with file opening using x+b mode --
393-- Testing ftruncate(): truncate file to half of its current size --
394int(1024)
395int(0)
396bool(true)
397int(0)
398bool(false)
399int(512)
400-- Testing ftruncate() with file opening using x+t mode --
401-- Testing ftruncate(): truncate file to half of its current size --
402int(1024)
403int(0)
404bool(true)
405int(0)
406bool(false)
407int(512)
408-- Testing ftruncate() with file opening using a mode --
409-- Testing ftruncate(): truncate file to half of its current size --
410int(1024)
411int(0)
412bool(true)
413int(0)
414bool(false)
415int(512)
416-- Testing ftruncate() with file opening using ab mode --
417-- Testing ftruncate(): truncate file to half of its current size --
418int(1024)
419int(0)
420bool(true)
421int(0)
422bool(false)
423int(512)
424-- Testing ftruncate() with file opening using at mode --
425-- Testing ftruncate(): truncate file to half of its current size --
426int(1024)
427int(0)
428bool(true)
429int(0)
430bool(false)
431int(512)
432-- Testing ftruncate() with file opening using a+ mode --
433-- Testing ftruncate(): truncate file to half of its current size --
434int(1024)
435int(0)
436bool(true)
437int(0)
438bool(false)
439int(512)
440-- Testing ftruncate() with file opening using a+b mode --
441-- Testing ftruncate(): truncate file to half of its current size --
442int(1024)
443int(0)
444bool(true)
445int(0)
446bool(false)
447int(512)
448-- Testing ftruncate() with file opening using a+t mode --
449-- Testing ftruncate(): truncate file to half of its current size --
450int(1024)
451int(0)
452bool(true)
453int(0)
454bool(false)
455int(512)
456Done
457