1--TEST--
2Test fgetc() function : usage variations - write only modes (Bug #42036)
3--FILE--
4<?php
5/*
6 Description: Gets character from file pointer
7*/
8
9/* try fgetc on files which are opened in non readable modes
10    w, wb, wt,
11    a, ab, at,
12    x, xb, xt
13*/
14// include the header for common test function
15include ("file.inc");
16
17echo "*** Testing fgetc() with file opened in write only mode ***\n";
18
19$file_modes = array("w", "wb", "wt", "a", "ab", "at", "x", "xb", "xt");
20$filename = __DIR__."/fgetc_variation3.tmp";
21foreach ($file_modes as $file_mode ) {
22  echo "-- File opened in mode : $file_mode --\n";
23
24  $file_handle = fopen($filename, $file_mode);
25  if(!$file_handle) {
26    echo "Error: failed to open file $filename!\n";
27    exit();
28  }
29  $data = "fgetc_variation test";
30  fwrite($file_handle, $data);
31
32  // rewind the file pointer to beginning of the file
33  var_dump( rewind($file_handle) );
34  var_dump( ftell($file_handle) );
35  var_dump( feof($file_handle) );
36
37  // read from file
38  var_dump( fgetc($file_handle) ); // expected : no chars should be read
39  var_dump( ftell($file_handle) ); // ensure that file pointer position is not changed
40  var_dump( feof($file_handle) ); // check if end of file pointer is set
41
42  // close the file
43  fclose($file_handle);
44
45  // delete the file
46  unlink($filename);
47}
48
49echo "Done\n";
50?>
51--EXPECTF--
52*** Testing fgetc() with file opened in write only mode ***
53-- File opened in mode : w --
54bool(true)
55int(0)
56bool(false)
57
58Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
59bool(false)
60int(0)
61bool(false)
62-- File opened in mode : wb --
63bool(true)
64int(0)
65bool(false)
66
67Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
68bool(false)
69int(0)
70bool(false)
71-- File opened in mode : wt --
72bool(true)
73int(0)
74bool(false)
75
76Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
77bool(false)
78int(0)
79bool(false)
80-- File opened in mode : a --
81bool(true)
82int(0)
83bool(false)
84
85Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
86bool(false)
87int(0)
88bool(false)
89-- File opened in mode : ab --
90bool(true)
91int(0)
92bool(false)
93
94Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
95bool(false)
96int(0)
97bool(false)
98-- File opened in mode : at --
99bool(true)
100int(0)
101bool(false)
102
103Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
104bool(false)
105int(0)
106bool(false)
107-- File opened in mode : x --
108bool(true)
109int(0)
110bool(false)
111
112Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
113bool(false)
114int(0)
115bool(false)
116-- File opened in mode : xb --
117bool(true)
118int(0)
119bool(false)
120
121Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
122bool(false)
123int(0)
124bool(false)
125-- File opened in mode : xt --
126bool(true)
127int(0)
128bool(false)
129
130Notice: fgetc(): Read of 8192 bytes failed with errno=9 Bad file descriptor in %s on line %d
131bool(false)
132int(0)
133bool(false)
134Done
135