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