xref: /PHP-5.5/ext/phar/tests/mounteddir.phpt (revision 228c2886)
1--TEST--
2Phar: mounted manifest directory test
3--SKIPIF--
4<?php
5if (!extension_loaded("phar")) die("skip");
6if (version_compare(PHP_VERSION, "6.0", ">")) die("skip pre-unicode version of PHP required");
7?>
8--INI--
9phar.readonly=0
10--FILE--
11<?php
12$fname = dirname(__FILE__) . '/tempmanifest1.phar.php';
13$pname = 'phar://' . $fname;
14
15$a = new Phar($fname);
16$a['index.php'] = '<?php
17Phar::mount("testit", dirname(Phar::running(0)) . "/testit");
18echo file_get_contents(Phar::running(1) . "/testit/extfile.php"), "\n";
19echo file_get_contents(Phar::running(1) . "/testit/directory"), "\n";
20echo file_get_contents(Phar::running(1) . "/testit/existing.txt"), "\n";
21include "testit/extfile.php";
22include "testit/extfile2.php";
23try {
24Phar::mount(".phar/stub.php", dirname(Phar::running(0)) . "/testit/extfile.php");
25} catch (Exception $e) {
26echo $e->getMessage(),"\n";
27}
28?>';
29$a['testit/existing.txt'] = 'oops';
30$a->setStub('<?php
31set_include_path("phar://" . __FILE__);
32include "index.php";
33__HALT_COMPILER();');
34unset($a);
35mkdir(dirname(__FILE__) . '/testit');
36mkdir(dirname(__FILE__) . '/testit/directory');
37file_put_contents(dirname(__FILE__) . '/testit/extfile.php', '<?php
38var_dump(__FILE__);
39?>');
40file_put_contents(dirname(__FILE__) . '/testit/extfile2.php', '<?php
41var_dump(__FILE__);
42?>');
43include dirname(__FILE__) . '/testit/extfile.php';
44include $fname;
45
46$a = opendir($pname . '/testit');
47$out = array();
48while (false !== ($b = readdir($a))) {
49	$out[] = $b;
50}
51sort($out);
52foreach ($out as $b) {
53	echo "$b\n";
54}
55$out = array();
56foreach (new Phar($pname . '/testit') as $b) {
57	$out[] = $b->getPathName();
58}
59sort($out);
60foreach ($out as $b) {
61	echo "$b\n";
62}
63try {
64Phar::mount($pname . '/testit', 'another\\..\\mistake');
65} catch (Exception $e) {
66echo $e->getMessage(), "\n";
67}
68try {
69Phar::mount($pname . '/notfound', dirname(__FILE__) . '/this/does/not/exist');
70} catch (Exception $e) {
71echo $e->getMessage(), "\n";
72}
73try {
74Phar::mount($pname . '/testit', dirname(__FILE__));
75} catch (Exception $e) {
76echo $e->getMessage(), "\n";
77}
78try {
79Phar::mount($pname . '/testit/extfile.php', dirname(__FILE__));
80} catch (Exception $e) {
81echo $e->getMessage(), "\n";
82}
83?>
84===DONE===
85--CLEAN--
86<?php
87@unlink(dirname(__FILE__) . '/tempmanifest1.phar.php');
88@unlink(dirname(__FILE__) . '/testit/extfile.php');
89@unlink(dirname(__FILE__) . '/testit/extfile2.php');
90@rmdir(dirname(__FILE__) . '/testit/directory');
91@rmdir(dirname(__FILE__) . '/testit');
92
93?>
94--EXPECTF--
95string(%d) "%sextfile.php"
96<?php
97var_dump(__FILE__);
98?>
99
100Warning: file_get_contents(phar://%stempmanifest1.phar.php/testit/directory): failed to open stream: phar error: path "testit/directory" is a directory in phar://%stempmanifest1.phar.php/index.php on line %d
101
102oops
103string(%d) "phar://%sextfile.php"
104string(%d) "phar://%sextfile2.php"
105Mounting of .phar/stub.php to %sextfile.php within phar %stests/tempmanifest1.phar.php failed
106.
107..
108directory
109extfile.php
110extfile2.php
111phar://%stempmanifest1.phar.php/testit%cdirectory
112phar://%stempmanifest1.phar.php/testit%cextfile.php
113phar://%stempmanifest1.phar.php/testit%cextfile2.php
114Mounting of /testit to another\..\mistake within phar %stempmanifest1.phar.php failed
115Mounting of /notfound to %stests/this/does/not/exist within phar %stempmanifest1.phar.php failed
116Mounting of /testit to %stests within phar %stests/tempmanifest1.phar.php failed
117Mounting of /testit/extfile.php to %stests within phar %stests/tempmanifest1.phar.php failed
118===DONE===
119