1--TEST--
2Test opendir() function : usage variations - different directory permissions
3--SKIPIF--
4<?php
5if( substr(PHP_OS, 0, 3) == 'WIN') {
6  die('skip Not for Windows');
7}
8// Skip if being run by root (files are always readable, writeable and executable)
9$filename = dirname(__FILE__) . "/opendir_root_check.tmp";
10$fp = fopen($filename, 'w');
11fclose($fp);
12if(fileowner($filename) == 0) {
13        unlink ($filename);
14        die('skip...cannot be run as root\n');
15}
16unlink($filename);
17?>
18--FILE--
19<?php
20/* Prototype  : mixed opendir(string $path[, resource $context])
21 * Description: Open a directory and return a dir_handle
22 * Source code: ext/standard/dir.c
23 */
24
25/*
26 * Open a directory using opendir() with different directory permissions
27 */
28
29echo "*** Testing opendir() : usage variations ***\n";
30
31// create the temporary directory
32$file_path = dirname(__FILE__);
33$dir_path = $file_path . "/opendir_variation7";
34mkdir($dir_path);
35
36/* different values for directory permissions */
37$permission_values = array(
38/*1*/  0477,  // owner has read only, other and group has rwx
39       0677,  // owner has rw only, other and group has rwx
40
41/*3*/  0444,  // all have read only
42       0666,  // all have rw only
43
44/*5*/  0400,  // owner has read only, group and others have no permission
45       0600,   // owner has rw only, group and others have no permission
46
47/*7*/  0470,  // owner has read only, group has rwx & others have no permission
48       0407,  // owner has read only, other has rwx & group has no permission
49
50/*9*/  0670,  // owner has rw only, group has rwx & others have no permission
51/*10*/ 0607   // owner has rw only, group has no permission and others have rwx
52);
53
54// Open directory with different permission values, read and close, expected: none of them to succeed.
55
56$iterator = 1;
57foreach ($permission_values as $perm) {
58
59	echo "\n-- Iteration $iterator --\n";
60	// try to remove the dir if exists  & create
61	if (is_dir($dir_path)){
62		chmod ($dir_path, 0777); // change dir permission to allow all operation
63		rmdir ($dir_path);
64	}
65	mkdir($dir_path);
66
67	// change the dir permisson to test dir on it
68	var_dump( chmod($dir_path, $perm) );
69
70	var_dump($dh = opendir($dir_path));
71
72	if (is_resource($dh)) {
73		closedir($dh);
74	}
75	$iterator++;
76}
77?>
78===DONE===
79--CLEAN--
80<?php
81// deleting temporary directory
82$dir_path = dirname(__FILE__) . "/opendir_variation7";
83rmdir($dir_path);
84?>
85--EXPECTF--
86*** Testing opendir() : usage variations ***
87
88-- Iteration 1 --
89bool(true)
90resource(%d) of type (stream)
91
92-- Iteration 2 --
93bool(true)
94resource(%d) of type (stream)
95
96-- Iteration 3 --
97bool(true)
98resource(%d) of type (stream)
99
100-- Iteration 4 --
101bool(true)
102resource(%d) of type (stream)
103
104-- Iteration 5 --
105bool(true)
106resource(%d) of type (stream)
107
108-- Iteration 6 --
109bool(true)
110resource(%d) of type (stream)
111
112-- Iteration 7 --
113bool(true)
114resource(%d) of type (stream)
115
116-- Iteration 8 --
117bool(true)
118resource(%d) of type (stream)
119
120-- Iteration 9 --
121bool(true)
122resource(%d) of type (stream)
123
124-- Iteration 10 --
125bool(true)
126resource(%d) of type (stream)
127===DONE===
128