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