1--TEST--
2Test symlink(), linkinfo(), link() and is_link() functions: basic functionality - link to files
3--SKIPIF--
4<?php
5if (substr(PHP_OS, 0, 3) == 'WIN') {
6    die('skip no symlinks on Windows');
7}
8?>
9--FILE--
10<?php
11/* Prototype: bool symlink ( string $target, string $link );
12   Description: creates a symbolic link to the existing target with the specified name link
13
14   Prototype: bool is_link ( string $filename );
15   Description: Tells whether the given file is a symbolic link.
16
17   Prototype: bool link ( string $target, string $link );
18   Description: Create a hard link
19
20   Prototype: int linkinfo ( string $path );
21   Description: Gets information about a link
22*/
23
24$file_path = dirname(__FILE__);
25
26// temp dir created in present working directory
27$dirname = "symlink_link_linkinfo_is_link_basic1";
28mkdir("$file_path/$dirname");  // creating temp dir
29
30/* Creating soft/hard link to $filename created in temp directory $dirname
31   and checking linkinfo() and is_link() on the link created */
32
33echo "*** Testing symlink(), linkinfo(), link() and is_link() : basic functionality ***\n";
34
35// creating file in $dirname, links are created to the this file
36$filename = "$file_path/$dirname/symlink_link_linkinfo_is_link_basic1.tmp";
37$filename = fopen($filename, "w");
38fclose($filename);
39
40// name of the soft link created to $filename
41$sym_linkname = "$file_path/$dirname/symlink_link_linkinfo_is_link_softlink_basic1.tmp";
42
43// name of the hard link created to $filename
44$linkname = "$file_path/$dirname/symlink_link_linkinfo_is_link_hardlink_basic1.tmp";
45
46// filename stored in array with single and double slash notation in its path
47$files = array (
48  "$file_path/$dirname/symlink_link_linkinfo_is_link_basic1.tmp",
49  "$file_path//$dirname//symlink_link_linkinfo_is_link_basic1.tmp"
50);
51
52$counter = 1;
53/* create soft/hard link to  the file
54   and check linkinfo() and is_link() on the link created */
55foreach($files as $file) {
56  echo "\n-- Iteration $counter --\n";
57  echo "-- Testing on soft links --\n";
58  // create soft link
59  var_dump( symlink($file, $sym_linkname) );
60  // checking information of link with linkinfo()
61  var_dump( linkinfo($sym_linkname) );
62  // checking if given file is soft link
63  var_dump( is_link($sym_linkname) );
64  // clear the cache
65  clearstatcache();
66
67  // testing on hard link
68  echo "-- Testing on hard links --\n";
69  // creating hard link
70  var_dump( link($file, $linkname) );
71  // checking information of link with linkinfo()
72  var_dump( linkinfo($linkname) );
73  // checking if given link is soft link; expected: false
74  var_dump( is_link($linkname) );
75  // clear the cache
76  clearstatcache();
77
78  // deleting the links
79  unlink($sym_linkname);
80  unlink($linkname);
81  $counter++;
82}
83
84echo "Done\n";
85?>
86--CLEAN--
87<?php
88$dirname = dirname(__FILE__)."/symlink_link_linkinfo_is_link_basic1";
89unlink("$dirname/symlink_link_linkinfo_is_link_basic1.tmp");
90rmdir($dirname);
91?>
92--EXPECTF--
93*** Testing symlink(), linkinfo(), link() and is_link() : basic functionality ***
94
95-- Iteration 1 --
96-- Testing on soft links --
97bool(true)
98int(%d)
99bool(true)
100-- Testing on hard links --
101bool(true)
102int(%d)
103bool(false)
104
105-- Iteration 2 --
106-- Testing on soft links --
107bool(true)
108int(%d)
109bool(true)
110-- Testing on hard links --
111bool(true)
112int(%d)
113bool(false)
114Done
115