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