1--TEST--
2RecursiveDirectoryIterator with dir path long or of edge case length
3--SKIPIF--
4<?php
5include __DIR__ . DIRECTORY_SEPARATOR . "util.inc";
6
7skip_if_not_win();
8
9if (strlen(__DIR__) > 259) die("skip Unsuitable starting path length");
10?>
11--FILE--
12<?php
13
14$need_len = 1024;
15//$need_len = 259;
16$dir = __DIR__;
17while ($need_len - strlen($dir) > 32) {
18    $dir .= DIRECTORY_SEPARATOR . str_repeat("a", 32);
19}
20$dir .= DIRECTORY_SEPARATOR . str_repeat("a", $need_len - strlen($dir));
21mkdir($dir, 0700, true);
22
23$fl = $dir . DIRECTORY_SEPARATOR . "hello.txt";
24file_put_contents($fl, "");
25
26
27$start = substr($dir, 0, strpos($dir, DIRECTORY_SEPARATOR, strlen(__DIR__)+1));
28$iter = new RecursiveIteratorIterator(
29    new RecursiveDirectoryIterator(
30        $start,
31        FilesystemIterator::SKIP_DOTS
32    ),
33    RecursiveIteratorIterator::CHILD_FIRST
34);
35
36foreach ($iter as $item) {
37    if (!$item->isDir()) {
38        var_dump($item->getPathname());
39    }
40}
41
42$iter->rewind();
43foreach ($iter as $item) {
44    if ($item->isDir()) {
45        rmdir($item->getPathname());
46    } else {
47        unlink($item->getPathname());
48    }
49}
50rmdir($start);
51var_dump(file_exists($start));
52
53/*unlink($fl);
54do {
55    rmdir($dir);
56    $dir = dirname($dir);
57} while (__DIR__ != $dir);*/
58
59?>
60--EXPECTF--
61string(%d) "%shello.txt"
62bool(false)
63