summaryrefslogtreecommitdiff
path: root/ext/standard/tests/file/symlink_link_linkinfo_is_link_variation1.phpt
blob: 98f4f19bbbba548a843b6ae7451aa5228d8ce0e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
--TEST--
Test symlink(), linkinfo(), link() and is_link() functions : usage variations - link name stored in an array/object
--SKIPIF--
<?php
if (PHP_OS_FAMILY === 'Windows') {
    require_once __DIR__ . '/windows_links/common.inc';
    skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
}
?>
--FILE--
<?php
/* Prototype: bool symlink ( string $target, string $link );
   Description: creates a symbolic link to the existing target with the specified name link

   Prototype: bool is_link ( string $filename );
   Description: Tells whether the given file is a symbolic link.

   Prototype: bool link ( string $target, string $link );
   Description: Create a hard link

   Prototype: int linkinfo ( string $path );
   Description: Gets information about a link
*/

/* Variation 1 : Creating links across directories where linkname is stored as an object and array member */

// creating temp directory which will contain temp file and links created
$file_path = __DIR__;
$dirname = "$file_path/symlink_link_linkinfo_is_link_variation1/test/home";
mkdir($dirname, 0777, true);

// creating temp file; links are created to this file later on
$filename = "$file_path/symlink_link_linkinfo_is_link_variation1/symlink_link_linkinfo_is_link_variation1.tmp";
$fp = fopen($filename, "w");
fclose($fp);

echo "*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members in an object ***\n";
class object_temp {
  var $linkname;
  function __construct($link) {
    $this->linkname = $link;
  }
}

$obj = new object_temp("$dirname/symlink_link_linkinfo_is_link_link.tmp");
/* Testing on soft links */
echo "\n-- Working with soft links --\n";
// creating soft link
var_dump( symlink($filename, $obj->linkname) );
// check if the link exists
$linkinfo = linkinfo($obj->linkname);
var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link
var_dump( is_link($obj->linkname) );
// delete the link created
unlink($obj->linkname);
// clear the cache
clearstatcache();

/* Testing on hard links */
echo "\n-- Working with hard links --\n";
// creating hard link
var_dump( link($filename, $obj->linkname) );
// check if the link exists
$linkinfo = linkinfo($obj->linkname);
var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link; expected: false as the link is a hardlink
var_dump( is_link($obj->linkname) );
// delete the link created
unlink($obj->linkname);
// clear the cache
clearstatcache();

echo "\n*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members of an array ***\n";

$link_arr = array("$dirname/symlink_link_linkinfo_is_link_link.tmp");

/* Testing on soft links */
echo "\n-- Working with soft links --\n";
// creating soft link
var_dump( symlink($filename, $link_arr[0]) );
// check if the link exist
$linkinfo = linkinfo($link_arr[0]);
var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link
var_dump( is_link($link_arr[0]) );
// delete the link created
unlink($link_arr[0]);
// clear the cache
clearstatcache();

/* Testing on hard links */
echo "\n-- Working with hard links --\n";
// creating hard link
var_dump( link($filename, $link_arr[0]) );
// check if the link exist
$linkinfo = linkinfo($link_arr[0]);
var_dump( is_int($linkinfo) && $linkinfo !== -1 );
// check if link is soft link; expected: false as this is a hardlink
var_dump( is_link($link_arr[0]) );
// delete the links created
unlink($link_arr[0]);
// clear the cache
clearstatcache();

echo "Done\n";
?>
--CLEAN--
<?php
$file_path = __DIR__;
$dirname = "$file_path/symlink_link_linkinfo_is_link_variation1";
unlink("$dirname/symlink_link_linkinfo_is_link_variation1.tmp");
rmdir("$dirname/test/home");
rmdir("$dirname/test");
rmdir($dirname);
?>
--EXPECTF--
*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members in an object ***

-- Working with soft links --
bool(true)
bool(true)
bool(true)

-- Working with hard links --
bool(true)
bool(true)
bool(false)

*** Testing symlink(), link(), linkinfo() and is_link() with linknames stored as members of an array ***

-- Working with soft links --
bool(true)
bool(true)
bool(true)

-- Working with hard links --
bool(true)
bool(true)
bool(false)
Done