1--TEST--
2Test touch() function : basic functionality
3--CREDITS--
4Dave Kelsey <d_kelsey@uk.ibm.com>
5--SKIPIF--
6<?php
7if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
8if (substr(PHP_OS, 0, 3) == 'WIN') {
9    die('skip.. only for Non Windows');
10}
11?>
12--FILE--
13<?php
14/* Prototype  : proto bool touch(string filename [, int time [, int atime]])
15 * Description: Set modification time of file
16 * Source code: ext/standard/filestat.c
17 * Alias to functions:
18 */
19
20echo "*** Testing touch() : basic functionality ***\n";
21
22$filename = dirname(__FILE__)."/touch.dat";
23
24echo "\n--- testing touch creates a file ---\n";
25@unlink($filename);
26if (file_exists($filename)) {
27   die("touch_basic failed");
28}
29var_dump( touch($filename) );
30if (file_exists($filename) == false) {
31   die("touch_basic failed");
32}
33
34echo "\n --- testing touch doesn't alter file contents ---\n";
35$testln = "Here is a test line";
36$h = fopen($filename, "wb");
37fwrite($h, $testln);
38fclose($h);
39touch($filename);
40$h = fopen($filename, "rb");
41echo fgets($h);
42fclose($h);
43
44echo "\n\n --- testing touch alters the correct file metadata ---\n";
45$init_meta = stat($filename);
46clearstatcache();
47sleep(1);
48touch($filename);
49$next_meta = stat($filename);
50$type = array("dev", "ino", "mode", "nlink", "uid", "gid",
51              "rdev", "size", "atime", "mtime", "ctime",
52              "blksize", "blocks");
53
54for ($i = 0; $i < count($type); $i++) {
55   if ($init_meta[$i] != $next_meta[$i]) {
56      echo "stat data differs at $type[$i]\n";
57   }
58}
59
60
61// Initialise all required variables
62$time = 10000;
63$atime = 20470;
64
65// Calling touch() with all possible arguments
66echo "\n --- testing touch using all parameters ---\n";
67var_dump( touch($filename, $time, $atime) );
68clearstatcache();
69$init_meta = stat($filename);
70echo "ctime=".$init_meta['ctime']."\n";
71echo "mtime=".$init_meta['mtime']."\n";
72echo "atime=".$init_meta['atime']."\n";
73
74unlink($filename);
75
76echo "Done";
77?>
78--EXPECTF--
79*** Testing touch() : basic functionality ***
80
81--- testing touch creates a file ---
82bool(true)
83
84 --- testing touch doesn't alter file contents ---
85Here is a test line
86
87 --- testing touch alters the correct file metadata ---
88stat data differs at atime
89stat data differs at mtime
90stat data differs at ctime
91
92 --- testing touch using all parameters ---
93bool(true)
94ctime=%d
95mtime=10000
96atime=20470
97Done
98