--- /dev/null
-/* Prototype: string readlink ( string $path );
- Description: Returns the target of a symbolic link
-
- Prototype: string realpath ( string $path );
- Description: Returns canonicalized absolute pathname
-*/
-
+ --TEST--
+ Test readlink() and realpath functions: basic functionality - diff. path notation for files
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip only for Windows');
+ }
+ ?>
+ --FILE--
+ <?php
+ /* creating directories, symbolic links and files */
+ $file_path = __DIR__;
+ mkdir("$file_path/readlink_realpath_basic2/home/test/", 0777, true);
+
+ $file_handle1 = fopen("$file_path/readlink_realpath_basic2/home/test/readlink_realpath_basic2.tmp", "w");
+ $file_handle2 = fopen("$file_path/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp", "w");
+ $file_handle3 = fopen("$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp", "w");
+ fclose($file_handle1);
+ fclose($file_handle2);
+ fclose($file_handle3);
+
+ echo "\n*** Testing realpath() on filenames ***\n";
+ $filenames = array (
+ /* filenames resulting in valid paths */
+ "$file_path/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp",
+ "$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp",
+ "$file_path/readlink_realpath_basic2//home/test//../test/./readlink_realpath_basic2.tmp",
+ "$file_path/readlink_realpath_basic2/home//../././readlink_realpath_basic2.tmp",
+
+ /* filenames with invalid path */
+ "$file_path///readlink_realpath_basic2/home//..//././test//readlink_realpath_basic2.tmp",
+ "$file_path/readlink_realpath_basic2/home/../home/../test/../readlink_realpath_basic2.tmp",
+ "$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp/"
+ );
+
+ $counter = 1;
+ /* loop through $files to read the filepath of $file in the above array */
+ foreach($filenames as $file) {
+ echo "\n-- Iteration $counter --\n";
+ var_dump( realpath($file) );
+ $counter++;
+ }
+
+ echo "Done\n";
+ ?>
+ --CLEAN--
+ <?php
+ $name_prefix = __DIR__."/readlink_realpath_basic2";
+ unlink("$name_prefix/home/test/readlink_realpath_basic2.tmp");
+ unlink("$name_prefix/home/readlink_realpath_basic2.tmp");
+ unlink("$name_prefix/readlink_realpath_basic2.tmp");
+ rmdir("$name_prefix/home/test/");
+ rmdir("$name_prefix/home/");
+ rmdir("$name_prefix/");
+ ?>
+ --EXPECTF--
+ *** Testing realpath() on filenames ***
+
+ -- Iteration 1 --
+ string(%d) "%s%ereadlink_realpath_basic2%ehome%ereadlink_realpath_basic2.tmp"
+
+ -- Iteration 2 --
+ string(%d) "%s%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
+
+ -- Iteration 3 --
+ string(%d) "%s%ereadlink_realpath_basic2%ehome%etest%ereadlink_realpath_basic2.tmp"
+
+ -- Iteration 4 --
+ string(%d) "%s%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
+
+ -- Iteration 5 --
+ bool(false)
+
+ -- Iteration 6 --
+ string(%d) "%s%eext%estandard%etests%efile%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
+
+ -- Iteration 7 --
+ %s
+ Done
--- /dev/null
-/* Prototype: string readlink ( string $path );
- Description: Returns the target of a symbolic link
-
- Prototype: string realpath ( string $path );
- Description: Returns canonicalized absolute pathname
-*/
-
-echo "*** Testing readlink(): error conditions ***\n";
-var_dump( readlink() ); // args < expected
-var_dump( readlink(__FILE__, 2) ); // args > expected
-
+ --TEST--
+ Test readlink() and realpath() functions: error conditions
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip only for Windows');
+ }
+ ?>
+ --FILE--
+ <?php
-echo "*** Testing realpath(): error conditions ***\n";
-var_dump( realpath() ); // args < expected
-var_dump( realpath(1, 2) ); // args > expected
-
+ echo "\n*** Testing readlink() on a non-existent link ***\n";
+ var_dump( readlink(__DIR__."/readlink_error.tmp") );
+
+ echo "\n*** Testing readlink() on existing file ***\n";
+ var_dump( readlink(__FILE__) );
+
+ echo "\n*** Testing readlink() on existing directory ***\n";
+ var_dump( readlink(__DIR__) );
+
-*** Testing readlink(): error conditions ***
-
-Warning: readlink() expects exactly 1 parameter, 0 given in %s on line %d
-NULL
-
-Warning: readlink() expects exactly 1 parameter, 2 given in %s on line %d
-NULL
-
+ echo "\n*** Testing realpath() on a non-existent file ***\n";
+ var_dump( realpath(__DIR__."/realpath_error.tmp") );
+
+ echo "Done\n";
+ ?>
+ --EXPECTF--
-*** Testing realpath(): error conditions ***
-
-Warning: realpath() expects exactly 1 parameter, 0 given in %s on line %d
-NULL
-
-Warning: realpath() expects exactly 1 parameter, 2 given in %s on line %d
-NULL
+ *** Testing readlink() on a non-existent link ***
+
+ Warning: readlink(): readlink failed to read the symbolic link (%s, error %d) in %s on line %d
+ bool(false)
+
+ *** Testing readlink() on existing file ***
+ string(%d) "%s%eext%estandard%etests%efile%ereadlink_realpath_error-win32.php"
+
+ *** Testing readlink() on existing directory ***
+ string(%d) "%s%eext%estandard%etests%efile"
+
+ *** Testing realpath() on a non-existent file ***
+ %s
+ Done
--- /dev/null
-/* Prototype: string readlink ( string $path );
- Description: Returns the target of a symbolic link
-
- Prototype: string realpath ( string $path );
- Description: Returns canonicalized absolute pathname
-*/
-
+ --TEST--
+ Test readlink() and realpath() functions: usage variation - linkname/filename stored in object(Bug #42038)
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip only for Windows');
+ } else {
+ include __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
+ }
+ ?>
+ --FILE--
+ <?php
+ echo "*** Testing readlink() and realpath() : usage variations ***\n";
+ $name_prefix = __DIR__;
+ $filename = "$name_prefix/readlink_realpath_variation1/home/tests/link/readlink_realpath_variation1.tmp";
+ mkdir("$name_prefix/readlink_realpath_variation1/home/tests/link/", 0777, true);
+
+ echo "\n*** Testing readlink() and realpath() with linkname stored inside a object ***\n";
+ // create a temp file
+ $file_handle = fopen($filename, "w");
+ fclose($file_handle);
+
+ // creating object with members as linkname
+ class object_temp {
+ public $linkname;
+ function __construct($link) {
+ $this->linkname = $link;
+ }
+ }
+ $obj1 = new object_temp("$name_prefix/readlink_realpath_variation1/../././readlink_realpath_variation1/home/readlink_realpath_variation1_link.tmp");
+ $obj2 = new object_temp("$name_prefix/readlink_realpath_variation1/home/../..///readlink_realpath_variation1_link.tmp");
+
+ echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an object --\n";
+ // creating the links
+ var_dump( symlink($filename, $obj1->linkname) );
+ var_dump( readlink($obj1->linkname) );
+ var_dump( realpath($obj1->linkname) );
+ var_dump( symlink($filename, $obj2->linkname) );
+ var_dump( readlink($obj2->linkname) );
+ var_dump( realpath($obj2->linkname) );
+
+ // deleting the link
+ unlink($obj1->linkname);
+ unlink($obj2->linkname);
+
+ echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an object --\n";
+ // creating hard links
+ var_dump( link($filename, $obj1->linkname) );
+ var_dump( readlink($obj1->linkname) ); // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($obj1->linkname) );
+ var_dump( link($filename, $obj2->linkname) );
+ var_dump( readlink($obj2->linkname) ); // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($obj2->linkname) );
+
+ // delete the links
+ unlink($obj1->linkname);
+ unlink($obj2->linkname);
+
+ echo "Done\n";
+ ?>
+ --CLEAN--
+ <?php
+ $name_prefix = __DIR__."/readlink_realpath_variation1";
+ unlink("$name_prefix/home/tests/link/readlink_realpath_variation1.tmp");
+ rmdir("$name_prefix/home/tests/link/");
+ rmdir("$name_prefix/home/tests/");
+ rmdir("$name_prefix/home/");
+ rmdir("$name_prefix/");
+ ?>
+ --EXPECTF--
+ *** Testing readlink() and realpath() : usage variations ***
+
+ *** Testing readlink() and realpath() with linkname stored inside a object ***
+
+ -- Testing readlink() and realpath() with softlink, linkname stored inside an object --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+
+ -- Testing readlink() and realpath() with hardlink, linkname stored inside an object --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
+ Done
--- /dev/null
-/* Prototype: string readlink ( string $path );
- Description: Returns the target of a symbolic link
-
- Prototype: string realpath ( string $path );
- Description: Returns canonicalized absolute pathname
-*/
-
+ --TEST--
+ Test readlink() and realpath() functions: usage variation - linkname/filename stored in array(Bug #42038)
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+ die('skip only for Windows');
+ } else {
+ include __DIR__ . '/windows_links/common.inc';
+ skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
+ }
+ ?>
+ --FILE--
+ <?php
+ echo "*** Testing readlink() and realpath() : usage variations ***\n";
+ $name_prefix = __DIR__;
+ // create temp dir
+ mkdir("$name_prefix/readlink_realpath_variation2/home/tests/link/", 0777, true);
+ // create the file
+ $filename = "$name_prefix/readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2.tmp";
+ $fp = fopen($filename, "w");
+ fclose($fp);
+
+ echo "\n*** Testing readlink() and realpath() with linkname stored in an array ***\n";
+ $link_arr = array (
+ "$name_prefix////readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2_link.tmp",
+ "$name_prefix/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/"
+ );
+
+ echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an array --\n";
+ // creating the links
+ var_dump( symlink($filename, $link_arr[0]) );
+ var_dump( readlink($link_arr[0]) );
+ var_dump( realpath($link_arr[0]) );
+ var_dump( symlink($filename, $link_arr[1]) );
+ var_dump( readlink($link_arr[1]) );
+ var_dump( realpath($link_arr[1]) );
+
+ // deleting the link
+ unlink($link_arr[0]);
+ unlink($link_arr[1]);
+
+ echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an array --\n";
+ // creating hard links
+ var_dump( link($filename, $link_arr[0]) );
+ var_dump( readlink($link_arr[0]) ); // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($link_arr[0]) );
+ var_dump( link($filename, $link_arr[1]) );
+ var_dump( readlink($link_arr[1]) ); // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($link_arr[1]) );
+
+ // delete the links
+ unlink($link_arr[0]);
+ unlink($link_arr[1]);
+
+ echo "Done\n";
+ ?>
+ --CLEAN--
+ <?php
+ $name_prefix = __DIR__."/readlink_realpath_variation2";
+ unlink("$name_prefix/home/tests/link/readlink_realpath_variation2.tmp");
+ rmdir("$name_prefix/home/tests/link/");
+ rmdir("$name_prefix/home/tests/");
+ rmdir("$name_prefix/home/");
+ rmdir("$name_prefix/");
+ ?>
+ --EXPECTF--
+ *** Testing readlink() and realpath() : usage variations ***
+
+ *** Testing readlink() and realpath() with linkname stored in an array ***
+
+ -- Testing readlink() and realpath() with softlink, linkname stored inside an array --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
+
+ Warning: symlink(): No such file or directory in %s on line %d
+ bool(false)
+
+ Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
+ bool(false)
+ bool(false)
+
+ Warning: unlink(%s/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/): No such file or directory in %s on line %d
+
+ -- Testing readlink() and realpath() with hardlink, linkname stored inside an array --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
+
+ Warning: link(): No such file or directory in %s on line %d
+ bool(false)
+
+ Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
+ bool(false)
+ bool(false)
+
+ Warning: unlink(%s/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/): No such file or directory in %s on line %d
+ Done