1--TEST--
2Test fileatime(), filemtime(), filectime() & touch() functions : usage variation
3--SKIPIF--
4<?php
5if (substr(PHP_OS, 0, 3) != 'WIN') {
6    die('skip Windows-only test');
7}
8if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
9?>
10--FILE--
11<?php
12
13function stat_fn( $filename ) {
14  echo "-- File access time is => ";
15  print( @date( 'Y:M:D:H:i:s', fileatime($filename) ) )."\n";
16  clearstatcache();
17  echo "-- File modification time is => ";
18  print( @date( 'Y:M:D:H:i:s', filemtime($filename) ) )."\n";
19  clearstatcache();
20  echo "-- inode change time is => ";
21  print( @date( 'Y:M:D:H:i:s', filectime($filename) ) )."\n";
22  clearstatcache();
23}
24
25echo "*** Testing fileattime(), filemtime(), filectime() & touch() : usage variations ***\n";
26$file_path = __DIR__;
27// create files
28$file_handle = fopen("$file_path/005_variation1.tmp", "w");
29fclose($file_handle);
30stat_fn("$file_path/005_variation1.tmp");
31sleep(1);
32
33$file_handle = fopen("$file_path/005_variation2.tmp", "w");
34fclose($file_handle);
35stat_fn("$file_path/005_variation2.tmp");
36sleep(1);
37
38$file_handle = fopen("$file_path/005_variation3.tmp", "w");
39fclose($file_handle);
40stat_fn("$file_path/005_variation3.tmp");
41
42// delete files
43unlink("$file_path/005_variation1.tmp");
44unlink("$file_path/005_variation2.tmp");
45unlink("$file_path/005_variation3.tmp");
46
47echo "\n-- Checking different times, just after creating the file --\n";
48$file_name = "$file_path/005_variation1.tmp";
49$file_write_handle = fopen($file_name, "w");
50fclose($file_write_handle);
51stat_fn($file_name);
52sleep(1);
53
54/* filectime + 2 */
55echo "\n-- Checking different times, after changing the file permission --\n";
56chmod($file_name, 0777);
57stat_fn($file_name);
58sleep(1);
59
60/* filemtime + 2 & filectime + 2 */
61echo "\n-- Checking different times, after writing into the file --\n";
62$file_write_handle = fopen($file_name, "w");
63fwrite($file_write_handle, "Hello, world");
64fclose($file_write_handle);
65stat_fn($file_name);
66sleep(1);
67
68/* fileatime + 2 */
69echo "\n-- Checking different times, after reading from the file --\n";
70$file_read_handle = fopen($file_name ,"r");
71fread($file_read_handle, 10);
72fclose( $file_read_handle);
73stat_fn($file_name);
74sleep(1);
75
76/* No change */
77echo "\n-- Checking same times, after creating a softlink to the file --\n";
78symlink($file_name, "$file_path/005_variation_softlink.tmp");
79stat_fn($file_name);
80sleep(1);
81
82/* filectime + 2 */
83echo "\n-- Checking different times, after creating a hardlink to the file --\n";
84link($file_name, "$file_path/005_variation_hardlink.tmp");
85stat_fn($file_name);
86sleep(1);
87
88/* No change */
89echo "\n-- Checking same times, after making a copy of the file --\n";
90$file_copy = "$file_path/005_variation_copy.tmp";
91copy($file_name, $file_copy);
92stat_fn($file_name);
93sleep(1);
94
95/* fileatime + 2 */
96echo "\n-- Checking different times, after performing is_file() operation on the file --\n";
97is_file($file_name);
98stat_fn($file_name);
99sleep(1);
100
101
102echo "\n*** Testing touch() function with different time values ***\n";
103$file_name2 = $file_path."/005_variation_touch.tmp";
104$file_handle = fopen($file_name2, "w");
105fclose($file_handle);
106sleep(1);
107
108/* Time is not mentioned */
109var_dump( touch($file_name2) ); //set to current system time
110stat_fn($file_name2);
111sleep(1);
112
113/* set to access(creation time of the file) time */
114var_dump( touch($file_name2, @date(fileatime($file_name2))) );
115stat_fn($file_name2);
116sleep(1);
117
118/* set to access time of $file_name2 */
119var_dump( touch($file_path."/005_variation_touch_fly.tmp", @date(fileatime($file_name2)), time()) );
120stat_fn($file_name2);
121sleep(1);
122
123/* set to default value, with Invalid timestamps */
124var_dump( touch($file_name2, 10) );
125stat_fn($file_name2);
126var_dump( touch($file_name2, 10, 20) );
127stat_fn($file_name2);
128
129/* touch() after renaming the file */
130rename($file_name2, "$file_path/005_variation_touch_new.tmp");
131stat_fn("$file_path/005_variation_touch_new.tmp");
132
133echo "Done\n";
134?>
135--CLEAN--
136<?php
137$file_path = __DIR__;
138unlink($file_path."/005_variation_softlink.tmp");
139unlink($file_path."/005_variation_hardlink.tmp");
140unlink($file_path."/005_variation1.tmp");
141unlink($file_path."/005_variation_copy.tmp");
142@unlink($file_path."/005_variation_touch.tmp");
143unlink($file_path."/005_variation_touch_fly.tmp");
144unlink($file_path."/005_variation_touch_new.tmp");
145?>
146--EXPECTF--
147*** Testing fileattime(), filemtime(), filectime() & touch() : usage variations ***
148-- File access time is => %d:%s:%s:%d:%d:%d
149-- File modification time is => %d:%s:%s:%d:%d:%d
150-- inode change time is => %d:%s:%s:%d:%d:%d
151-- File access time is => %d:%s:%s:%d:%d:%d
152-- File modification time is => %d:%s:%s:%d:%d:%d
153-- inode change time is => %d:%s:%s:%d:%d:%d
154-- File access time is => %d:%s:%s:%d:%d:%d
155-- File modification time is => %d:%s:%s:%d:%d:%d
156-- inode change time is => %d:%s:%s:%d:%d:%d
157
158-- Checking different times, just after creating the file --
159-- File access time is => %d:%s:%s:%d:%d:%d
160-- File modification time is => %d:%s:%s:%d:%d:%d
161-- inode change time is => %d:%s:%s:%d:%d:%d
162
163-- Checking different times, after changing the file permission --
164-- File access time is => %d:%s:%s:%d:%d:%d
165-- File modification time is => %d:%s:%s:%d:%d:%d
166-- inode change time is => %d:%s:%s:%d:%d:%d
167
168-- Checking different times, after writing into the file --
169-- File access time is => %d:%s:%s:%d:%d:%d
170-- File modification time is => %d:%s:%s:%d:%d:%d
171-- inode change time is => %d:%s:%s:%d:%d:%d
172
173-- Checking different times, after reading from the file --
174-- File access time is => %d:%s:%s:%d:%d:%d
175-- File modification time is => %d:%s:%s:%d:%d:%d
176-- inode change time is => %d:%s:%s:%d:%d:%d
177
178-- Checking same times, after creating a softlink to the file --
179-- File access time is => %d:%s:%s:%d:%d:%d
180-- File modification time is => %d:%s:%s:%d:%d:%d
181-- inode change time is => %d:%s:%s:%d:%d:%d
182
183-- Checking different times, after creating a hardlink to the file --
184-- File access time is => %d:%s:%s:%d:%d:%d
185-- File modification time is => %d:%s:%s:%d:%d:%d
186-- inode change time is => %d:%s:%s:%d:%d:%d
187
188-- Checking same times, after making a copy of the file --
189-- File access time is => %d:%s:%s:%d:%d:%d
190-- File modification time is => %d:%s:%s:%d:%d:%d
191-- inode change time is => %d:%s:%s:%d:%d:%d
192
193-- Checking different times, after performing is_file() operation on the file --
194-- File access time is => %d:%s:%s:%d:%d:%d
195-- File modification time is => %d:%s:%s:%d:%d:%d
196-- inode change time is => %d:%s:%s:%d:%d:%d
197
198*** Testing touch() function with different time values ***
199bool(true)
200-- File access time is => %d:%s:%s:%d:%d:%d
201-- File modification time is => %d:%s:%s:%d:%d:%d
202-- inode change time is => %d:%s:%s:%d:%d:%d
203bool(true)
204-- File access time is => %d:%s:%s:%d:%d:%d
205-- File modification time is => %d:%s:%s:%d:%d:%d
206-- inode change time is => %d:%s:%s:%d:%d:%d
207bool(true)
208-- File access time is => %d:%s:%s:%d:%d:%d
209-- File modification time is => %d:%s:%s:%d:%d:%d
210-- inode change time is => %d:%s:%s:%d:%d:%d
211bool(true)
212-- File access time is => %d:%s:%s:%d:%d:%d
213-- File modification time is => %d:%s:%s:%d:%d:%d
214-- inode change time is => %d:%s:%s:%d:%d:%d
215bool(true)
216-- File access time is => %d:%s:%s:%d:%d:%d
217-- File modification time is => %d:%s:%s:%d:%d:%d
218-- inode change time is => %d:%s:%s:%d:%d:%d
219-- File access time is => %d:%s:%s:%d:%d:%d
220-- File modification time is => %d:%s:%s:%d:%d:%d
221-- inode change time is => %d:%s:%s:%d:%d:%d
222Done
223