1--TEST-- 2chmod() with various paths 3--SKIPIF-- 4<?php 5if (substr(PHP_OS, 0, 3) != 'WIN') { 6 die('skip Windows only chmod test'); 7} 8?> 9--FILE-- 10<?php 11 12define("PERMISSIONS_MASK", 0777); 13 14$script_directory = dirname(__FILE__); 15chdir($script_directory); 16$test_dirname = basename(__FILE__, ".php") . "testdir"; 17mkdir($test_dirname); 18 19$filepath = __FILE__ . ".tmp"; 20$filename = basename($filepath); 21$fd = fopen($filepath, "w+"); 22fclose($fd); 23 24echo "chmod() on a path containing .. and .\n"; 25var_dump(chmod("./$test_dirname/../$filename", 0777)); 26var_dump(chmod("./$test_dirname/../$filename", 0755)); 27clearstatcache(); 28printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK); 29 30echo "\nchmod() on a path containing .. with invalid directories\n"; 31var_dump(chmod($filepath, 0777)); 32var_dump(chmod("./$test_dirname/bad_dir/../../$filename", 0755)); 33clearstatcache(); 34printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK); 35 36echo "\nchmod() on a relative path from a different working directory\n"; 37chdir($test_dirname); 38var_dump(chmod("../$filename", 0777)); 39var_dump(chmod("../$filename", 0755)); 40clearstatcache(); 41printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK); 42chdir($script_directory); 43 44echo "\nchmod() on a directory with a trailing /\n"; 45var_dump(chmod($test_dirname, 0777)); 46var_dump(chmod("$test_dirname/", 0775)); 47clearstatcache(); 48printf("%o\n", fileperms($filepath) & PERMISSIONS_MASK); 49 50chdir($script_directory); 51rmdir($test_dirname); 52unlink($filepath); 53 54?> 55--EXPECTF-- 56chmod() on a path containing .. and . 57bool(true) 58bool(true) 59666 60 61chmod() on a path containing .. with invalid directories 62bool(true) 63bool(true) 64666 65 66chmod() on a relative path from a different working directory 67bool(true) 68bool(true) 69666 70 71chmod() on a directory with a trailing / 72bool(true) 73bool(true) 74666 75