1--TEST--
2Test readlink() and realpath() functions: usage variation - linkname/filename stored in array(Bug #42038)
3--SKIPIF--
4<?php
5if (substr(PHP_OS, 0, 3) != 'WIN') {
6    die('skip only for Windows');
7} else {
8    include __DIR__ . '/windows_links/common.inc';
9    skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
10}
11?>
12--FILE--
13<?php
14/* Prototype: string readlink ( string $path );
15   Description: Returns the target of a symbolic link
16
17   Prototype: string realpath ( string $path );
18   Description: Returns canonicalized absolute pathname
19*/
20
21echo "*** Testing readlink() and realpath() : usage variations ***\n";
22$name_prefix = __DIR__;
23// create temp dir
24mkdir("$name_prefix/readlink_realpath_variation2/home/tests/link/", 0777, true);
25// create the file
26$filename = "$name_prefix/readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2.tmp";
27$fp = fopen($filename, "w");
28fclose($fp);
29
30echo "\n*** Testing readlink() and realpath() with linkname stored in an array ***\n";
31$link_arr = array (
32  "$name_prefix////readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2_link.tmp",
33  "$name_prefix/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/"
34);
35
36echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an array --\n";
37// creating the links
38var_dump( symlink($filename, $link_arr[0]) );
39var_dump( readlink($link_arr[0]) );
40var_dump( realpath($link_arr[0]) );
41var_dump( symlink($filename, $link_arr[1]) );
42var_dump( readlink($link_arr[1]) );
43var_dump( realpath($link_arr[1]) );
44
45// deleting the link
46unlink($link_arr[0]);
47unlink($link_arr[1]);
48
49echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an array --\n";
50// creating hard links
51var_dump( link($filename, $link_arr[0]) );
52var_dump( readlink($link_arr[0]) );   // invalid because readlink doesn't work with hardlink
53var_dump( realpath($link_arr[0]) );
54var_dump( link($filename, $link_arr[1]) );
55var_dump( readlink($link_arr[1]) );   // invalid because readlink doesn't work with hardlink
56var_dump( realpath($link_arr[1]) );
57
58// delete the links
59unlink($link_arr[0]);
60unlink($link_arr[1]);
61
62echo "Done\n";
63?>
64--CLEAN--
65<?php
66$name_prefix = __DIR__."/readlink_realpath_variation2";
67unlink("$name_prefix/home/tests/link/readlink_realpath_variation2.tmp");
68rmdir("$name_prefix/home/tests/link/");
69rmdir("$name_prefix/home/tests/");
70rmdir("$name_prefix/home/");
71rmdir("$name_prefix/");
72?>
73--EXPECTF--
74*** Testing readlink() and realpath() : usage variations ***
75
76*** Testing readlink() and realpath() with linkname stored in an array ***
77
78-- Testing readlink() and realpath() with softlink, linkname stored inside an array --
79bool(true)
80string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
81string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
82
83Warning: symlink(): No such file or directory in %s on line %d
84bool(false)
85
86Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
87bool(false)
88bool(false)
89
90Warning: unlink(%s/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/): No such file or directory in %s on line %d
91
92-- Testing readlink() and realpath() with hardlink, linkname stored inside an array --
93bool(true)
94string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
95string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
96
97Warning: link(): No such file or directory in %s on line %d
98bool(false)
99
100Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
101bool(false)
102bool(false)
103
104Warning: unlink(%s/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/): No such file or directory in %s on line %d
105Done
106