1--TEST--
2Test symlink(), linkinfo(), link() and is_link() functions : usage variations - link name stored in an array/object
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/* Variation 1 : Creating links across directories where linkname is stored as an object and array member */
13
14// creating temp directory which will contain temp file and links created
15$file_path = __DIR__;
16$dirname = "$file_path/symlink_link_linkinfo_is_link_variation1/test/home";
17mkdir($dirname, 0777, true);
18
19// creating temp file; links are created to this file later on
20$filename = "$file_path/symlink_link_linkinfo_is_link_variation1/symlink_link_linkinfo_is_link_variation1.tmp";
21$fp = fopen($filename, "w");
22fclose($fp);
23
24echo "*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members in an object ***\n";
25class object_temp {
26  var $linkname;
27  function __construct($link) {
28    $this->linkname = $link;
29  }
30}
31
32$obj = new object_temp("$dirname/symlink_link_linkinfo_is_link_link.tmp");
33/* Testing on soft links */
34echo "\n-- Working with soft links --\n";
35// creating soft link
36var_dump( symlink($filename, $obj->linkname) );
37// check if the link exists
38$linkinfo = linkinfo($obj->linkname);
39var_dump( is_int($linkinfo) && $linkinfo !== -1 );
40// check if link is soft link
41var_dump( is_link($obj->linkname) );
42// delete the link created
43unlink($obj->linkname);
44// clear the cache
45clearstatcache();
46
47/* Testing on hard links */
48echo "\n-- Working with hard links --\n";
49// creating hard link
50var_dump( link($filename, $obj->linkname) );
51// check if the link exists
52$linkinfo = linkinfo($obj->linkname);
53var_dump( is_int($linkinfo) && $linkinfo !== -1 );
54// check if link is soft link; expected: false as the link is a hardlink
55var_dump( is_link($obj->linkname) );
56// delete the link created
57unlink($obj->linkname);
58// clear the cache
59clearstatcache();
60
61echo "\n*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members of an array ***\n";
62
63$link_arr = array("$dirname/symlink_link_linkinfo_is_link_link.tmp");
64
65/* Testing on soft links */
66echo "\n-- Working with soft links --\n";
67// creating soft link
68var_dump( symlink($filename, $link_arr[0]) );
69// check if the link exist
70$linkinfo = linkinfo($link_arr[0]);
71var_dump( is_int($linkinfo) && $linkinfo !== -1 );
72// check if link is soft link
73var_dump( is_link($link_arr[0]) );
74// delete the link created
75unlink($link_arr[0]);
76// clear the cache
77clearstatcache();
78
79/* Testing on hard links */
80echo "\n-- Working with hard links --\n";
81// creating hard link
82var_dump( link($filename, $link_arr[0]) );
83// check if the link exist
84$linkinfo = linkinfo($link_arr[0]);
85var_dump( is_int($linkinfo) && $linkinfo !== -1 );
86// check if link is soft link; expected: false as this is a hardlink
87var_dump( is_link($link_arr[0]) );
88// delete the links created
89unlink($link_arr[0]);
90// clear the cache
91clearstatcache();
92
93echo "Done\n";
94?>
95--CLEAN--
96<?php
97$file_path = __DIR__;
98$dirname = "$file_path/symlink_link_linkinfo_is_link_variation1";
99unlink("$dirname/symlink_link_linkinfo_is_link_variation1.tmp");
100rmdir("$dirname/test/home");
101rmdir("$dirname/test");
102rmdir($dirname);
103?>
104--EXPECTF--
105*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members in an object ***
106
107-- Working with soft links --
108bool(true)
109bool(true)
110bool(true)
111
112-- Working with hard links --
113bool(true)
114bool(true)
115bool(false)
116
117*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members of an array ***
118
119-- Working with soft links --
120bool(true)
121bool(true)
122bool(true)
123
124-- Working with hard links --
125bool(true)
126bool(true)
127bool(false)
128Done
129