1--TEST--
2Test file_put_contents() function : usage variation - various absolute and relative paths
3--CREDITS--
4Dave Kelsey <d_kelsey@uk.ibm.com>
5--SKIPIF--
6<?php
7if(substr(PHP_OS, 0, 3) != "WIN")
8  die("skip Only run on Windows");
9?>
10--FILE--
11<?php
12/* Prototype  : int file_put_contents(string file, mixed data [, int flags [, resource context]])
13 * Description: Write/Create a file with contents data and return the number of bytes written
14 * Source code: ext/standard/file.c
15 * Alias to functions:
16 */
17
18echo "*** Testing file_put_contents() : usage variation ***\n";
19
20$mainDir = "filePutContentsVar7.dir";
21$subDir = "filePutContentsVar7Sub";
22$absMainDir = dirname(__FILE__)."/".$mainDir;
23mkdir($absMainDir);
24$absSubDir = $absMainDir."\\".$subDir;
25mkdir($absSubDir);
26
27$old_dir_path = getcwd();
28chdir(dirname(__FILE__));
29$unixifiedDir = '/'.substr(str_replace('\\','/',$absSubDir),3);
30
31
32// Note invalid dirs in p8 result in (The system cannot find the path specified.)
33// rather than No Such File or Directory in php.net
34$allDirs = array(
35  // absolute paths
36  "$absSubDir\\",
37  "$absSubDir\\..\\".$subDir,
38  "$absSubDir\\\\..\\.\\".$subDir,
39  "$absSubDir\\..\\..\\".$mainDir."\\.\\".$subDir,
40  "$absSubDir\\..\\\\\\".$subDir."\\\\..\\\\..\\".$subDir,
41  "$absSubDir\\BADDIR",
42
43  // relative paths
44  $mainDir."\\".$subDir,
45  $mainDir."\\\\".$subDir,
46   $mainDir."\\\\\\".$subDir,
47  ".\\".$mainDir."\\..\\".$mainDir."\\".$subDir,
48  "BADDIR",
49
50  // unixifed path
51  $unixifiedDir,
52);
53
54$filename = 'FileGetContentsVar7.tmp';
55$absFile = $absSubDir.'/'.$filename;
56$data = "This was the written data";
57
58for($i = 0; $i<count($allDirs); $i++) {
59  $j = $i+1;
60  $dir = $allDirs[$i];
61  echo "\n-- Iteration $j --\n";
62  $res = file_put_contents($dir."\\".$filename, ($data + $i));
63  if ($res !== false) {
64      $in = file_get_contents($absFile);
65      if ($in == ($data + $i)) {
66         echo "Data written correctly\n";
67      }
68      else {
69         echo "Data not written correctly or to correct place\n";
70      }
71      unlink($dir."/".$filename);
72  }
73  else {
74     echo "No data written\n";
75  }
76
77}
78
79chdir($old_dir_path);
80rmdir($absSubDir);
81rmdir($absMainDir);
82
83echo "\n*** Done ***\n";
84?>
85--EXPECTF--
86*** Testing file_put_contents() : usage variation ***
87
88-- Iteration 1 --
89Data written correctly
90
91-- Iteration 2 --
92Data written correctly
93
94-- Iteration 3 --
95Data written correctly
96
97-- Iteration 4 --
98Data written correctly
99
100-- Iteration 5 --
101
102Warning: file_put_contents(%sfilePutContentsVar7.dir\filePutContentsVar7Sub\..\\\filePutContentsVar7Sub\\..\\..\filePutContentsVar7Sub\FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
103No data written
104
105-- Iteration 6 --
106
107Warning: file_put_contents(%sfilePutContentsVar7.dir\filePutContentsVar7Sub\BADDIR\FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
108No data written
109
110-- Iteration 7 --
111Data written correctly
112
113-- Iteration 8 --
114Data written correctly
115
116-- Iteration 9 --
117Data written correctly
118
119-- Iteration 10 --
120Data written correctly
121
122-- Iteration 11 --
123
124Warning: file_put_contents(BADDIR\FileGetContentsVar7.tmp): failed to open stream: %s in %s on line %d
125No data written
126
127-- Iteration 12 --
128Data written correctly
129
130*** Done ***