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