xref: /PHP-8.0/ext/phar/tests/027.phpt (revision f8d79582)
1--TEST--
2Phar: phar:// opendir
3--SKIPIF--
4<?php
5if (!extension_loaded("phar")) die("skip");
6?>
7--INI--
8phar.require_hash=0
9--FILE--
10<?php
11$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.php';
12$pname = 'phar://' . $fname;
13$file = "<?php __HALT_COMPILER(); ?>";
14
15$files = array();
16$files['a.php']   = '<?php echo "This is a\n"; require \''.$pname.'/b.php\'; ?>';
17$files['b.php']   = '<?php echo "This is b\n"; require \''.$pname.'/b/c.php\'; ?>';
18$files['b/c.php'] = '<?php echo "This is b/c\n"; require \''.$pname.'/b/d.php\'; ?>';
19$files['b/d.php'] = '<?php echo "This is b/d\n"; require \''.$pname.'/e.php\'; ?>';
20$files['e.php']   = '<?php echo "This is e\n"; ?>';
21
22include 'files/phar_test.inc';
23
24function dump($phar, $base)
25{
26    var_dump(str_replace(__DIR__, '*', $phar) . $base);
27    $dir = opendir($phar . $base);
28    if ($base == '/')
29    {
30        $base = '';
31    }
32    while (false !== ($entry = readdir($dir))) {
33        $entry = $base . '/' . $entry;
34        var_dump($entry);
35        var_dump(is_dir($phar . $entry));
36        if (is_dir($phar . $entry))
37        {
38            dump($phar, $entry);
39        }
40    }
41}
42
43dump($pname, '/');
44
45$a = opendir($pname);
46// this may stop working in future versions, but is here for code coverage purposes
47echo "fseek on dir handle\n";
48var_dump(fseek($a, 0, SEEK_END), ftell($a));
49var_dump(fseek($a, -1), ftell($a));
50var_dump(fseek($a, 1), ftell($a));
51echo "fwrite on dir handle\n";
52var_dump(fwrite($a, 'hi'));
53var_dump(fstat($a));
54closedir($a);
55echo "opendir edge cases\n";
56var_dump(opendir("phar://"));
57var_dump(opendir("phar://foo.phar/hi"));
58?>
59--CLEAN--
60<?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
61--EXPECTF--
62string(%d) "phar://*/027.phar.php/"
63string(6) "/a.php"
64bool(false)
65string(2) "/b"
66bool(true)
67string(%d) "phar://*/027.phar.php/b"
68string(8) "/b/c.php"
69bool(false)
70string(8) "/b/d.php"
71bool(false)
72string(6) "/b.php"
73bool(false)
74string(6) "/e.php"
75bool(false)
76fseek on dir handle
77int(0)
78int(4)
79int(-1)
80int(4)
81int(0)
82int(1)
83fwrite on dir handle
84bool(false)
85bool(false)
86opendir edge cases
87
88Warning: opendir(phar://): Failed to open directory: phar error: no directory in "phar://", must have at least phar:/// for root directory (always use full path to a new phar)
89phar url "phar://" is unknown in %s027.php on line %d
90bool(false)
91
92Warning: opendir(phar://foo.phar/hi): Failed to open directory: phar error: invalid url or non-existent phar "phar://foo.phar/hi"
93phar url "phar://foo.phar/hi" is unknown in %s027.php on line %d
94bool(false)
95