1--TEST--
2Test readlink() and realpath() functions: usage variation - linkname/filename stored in object(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$filename = "$name_prefix/readlink_realpath_variation1/home/tests/link/readlink_realpath_variation1.tmp";
24mkdir("$name_prefix/readlink_realpath_variation1/home/tests/link/", 0777, true);
25
26echo "\n*** Testing readlink() and realpath() with linkname stored inside a object ***\n";
27// create a temp file
28$file_handle = fopen($filename, "w");
29fclose($file_handle);
30
31// creating object with members as linkname
32class object_temp {
33  public $linkname;
34  function __construct($link) {
35    $this->linkname = $link;
36  }
37}
38$obj1 = new object_temp("$name_prefix/readlink_realpath_variation1/../././readlink_realpath_variation1/home/readlink_realpath_variation1_link.tmp");
39$obj2 = new object_temp("$name_prefix/readlink_realpath_variation1/home/../..///readlink_realpath_variation1_link.tmp");
40
41echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an object --\n";
42// creating the links
43var_dump( symlink($filename, $obj1->linkname) );
44var_dump( readlink($obj1->linkname) );
45var_dump( realpath($obj1->linkname) );
46var_dump( symlink($filename, $obj2->linkname) );
47var_dump( readlink($obj2->linkname) );
48var_dump( realpath($obj2->linkname) );
49
50// deleting the link
51unlink($obj1->linkname);
52unlink($obj2->linkname);
53
54echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an object --\n";
55// creating hard links
56var_dump( link($filename, $obj1->linkname) );
57var_dump( readlink($obj1->linkname) );   // invalid because readlink doesn't work with hardlink
58var_dump( realpath($obj1->linkname) );
59var_dump( link($filename, $obj2->linkname) );
60var_dump( readlink($obj2->linkname) );   // invalid because readlink doesn't work with hardlink
61var_dump( realpath($obj2->linkname) );
62
63// delete the links
64unlink($obj1->linkname);
65unlink($obj2->linkname);
66
67echo "Done\n";
68?>
69--CLEAN--
70<?php
71$name_prefix = __DIR__."/readlink_realpath_variation1";
72unlink("$name_prefix/home/tests/link/readlink_realpath_variation1.tmp");
73rmdir("$name_prefix/home/tests/link/");
74rmdir("$name_prefix/home/tests/");
75rmdir("$name_prefix/home/");
76rmdir("$name_prefix/");
77?>
78--EXPECTF--
79*** Testing readlink() and realpath() : usage variations ***
80
81*** Testing readlink() and realpath() with linkname stored inside a object ***
82
83-- Testing readlink() and realpath() with softlink, linkname stored inside an object --
84bool(true)
85string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
86string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
87bool(true)
88string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
89string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
90
91-- Testing readlink() and realpath() with hardlink, linkname stored inside an object --
92bool(true)
93string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
94string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
95bool(true)
96string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
97string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
98Done
99