1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
--TEST--
Test fopen() function : variation: use include path and stream context (absolute directories in path)
--CREDITS--
Dave Kelsey <d_kelsey@uk.ibm.com>
--FILE--
<?php
/* Prototype : resource fopen(string filename, string mode [, bool use_include_path [, resource context]])
* Description: Open a file or a URL and return a file pointer
* Source code: ext/standard/file.c
* Alias to functions:
*/
//create the include directory structure
$thisTestDir = basename(__FILE__, ".php") . ".dir";
mkdir($thisTestDir);
chdir($thisTestDir);
$workingDir = "workdir";
$filename = basename(__FILE__, ".php") . ".tmp";
$scriptDir = dirname(__FILE__);
$baseDir = getcwd();
$secondFile = $baseDir."/dir2/".$filename;
$firstFile = "../dir1/".$filename;
$scriptFile = $scriptDir.'/'.$filename;
$newdirs = array("dir1", "dir2", "dir3");
$pathSep = ":";
$newIncludePath = "";
if(substr(PHP_OS, 0, 3) == 'WIN' ) {
$pathSep = ";";
}
foreach($newdirs as $newdir) {
mkdir($newdir);
$newIncludePath .= $baseDir.'/'.$newdir.$pathSep;
}
mkdir($workingDir);
chdir($workingDir);
//define the files to go into these directories, create one in dir2
echo "\n--- testing include path ---\n";
set_include_path($newIncludePath);
$modes = array("r", "r+", "rt");
foreach($modes as $mode) {
test_fopen($mode);
}
restore_include_path();
// remove the directory structure
chdir($baseDir);
rmdir($workingDir);
foreach($newdirs as $newdir) {
rmdir($newdir);
}
chdir("..");
rmdir($thisTestDir);
function test_fopen($mode) {
global $scriptFile, $secondFile, $firstFile, $filename;
// create a file in the middle directory
$h = fopen($secondFile, "w");
fwrite($h, "in dir2");
fclose($h);
echo "\n** testing with mode=$mode **\n";
// should read dir2 file
$h = fopen($filename, $mode, true);
fpassthru($h);
fclose($h);
echo "\n";
//create a file in dir1
$h = fopen($firstFile, "w");
fwrite($h, "in dir1");
fclose($h);
//should now read dir1 file
$h = fopen($filename, $mode, true);
fpassthru($h);
fclose($h);
echo "\n";
// create a file in working directory
$h = fopen($filename, "w");
fwrite($h, "in working dir");
fclose($h);
//should still read dir1 file
$h = fopen($filename, $mode, true);
fpassthru($h);
fclose($h);
echo "\n";
unlink($firstFile);
unlink($secondFile);
//should read the file in working dir
$h = fopen($filename, $mode, true);
fpassthru($h);
fclose($h);
echo "\n";
// create a file in the script directory
$h = fopen($scriptFile, "w");
fwrite($h, "in script dir");
fclose($h);
//should read the file in script dir
$h = fopen($filename, $mode, true);
fpassthru($h);
fclose($h);
echo "\n";
//cleanup
unlink($filename);
unlink($scriptFile);
}
?>
===DONE===
--EXPECTF--
--- testing include path ---
** testing with mode=r **
in dir2
in dir1
in dir1
in working dir
in script dir
** testing with mode=r+ **
in dir2
in dir1
in dir1
in working dir
in script dir
** testing with mode=rt **
in dir2
in dir1
in dir1
in working dir
in script dir
===DONE===
|