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