- scandir: documentation ( source)
- mkdir: documentation ( source)
- unlink: documentation ( source)
- iterator_to_array: documentation ( source)
- fopen: documentation ( source)
- is_dir: documentation ( source)
<?php
class Test
{
protected $path = '/tmp/directory';
public function createTestFiles ()
{
$amount = 63;
if (!is_dir($this->path)) {
mkdir($this->path);
}
foreach (scandir($this->path) as $filename) {
@unlink("{$this->path}/$filename");
}
for ($num = 1; $num <= $amount; $num++) {
fopen("{$this->path}/{$num}.txt", "a");
}
}
public function runTest()
{
echo 'get by foreach: ' . $this->getByForeach() . PHP_EOL;
echo 'get by foreach with rewind: ' . $this->getByForeachWithRewind() . PHP_EOL;
echo 'get by foreach after foreach: ' . $this->getByForeachAfterForeach() . PHP_EOL;
echo 'get by loop: ' . $this->getByloop() . PHP_EOL;
echo 'get by iterator_to_array: ' . $this->getByIteratorToArray() . PHP_EOL;
echo 'get by iterator_to_array with rewind: ' . $this->getByIteratorToArrayWithRewind() . PHP_EOL;
}
public function getByForeach()
{
$directory = new RecursiveDirectoryIterator($this->path);
$count = 0;
foreach ($directory as $filename => $fileInfo) {
$count++;
}
return $count;
}
public function getByForeachWithRewind()
{
$directory = new RecursiveDirectoryIterator($this->path);
$count = 0;
$directory->rewind();
foreach ($directory as $filename => $fileInfo) {
$count++;
}
return $count;
}
public function getByForeachAfterForeach()
{
$directory = new RecursiveDirectoryIterator($this->path);
$count = 0;
foreach ($directory as $filename => $fileInfo) {
// do nothing
}
foreach ($directory as $filename => $fileInfo) {
$count++;
}
return $count;
}
public function getByLoop()
{
$directory = new RecursiveDirectoryIterator($this->path);
$count = 0;
while ($directory->valid()) {
$count++;
$directory->next();
}
return $count;
}
public function getByIteratorToArray()
{
$directory = new RecursiveDirectoryIterator($this->path);
return count(iterator_to_array($directory));
}
public function getByIteratorToArrayWithRewind()
{
$directory = new RecursiveDirectoryIterator($this->path);
$directory->rewind();
return count(iterator_to_array($directory));
}
}
$test = new Test();
$test->createTestFiles();
$test->runTest();
# comment so that 3v4l sees a change in the file