|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2021-02-09 14:05 UTC] antonfedonyuk at gmail dot com
Description: ------------ --- From manual page: https://php.net/class.filesystemiterator --- Flag FilesystemIterator::FOLLOW_SYMLINKS remove FilesystemIterator::KEY_AS_FILENAME from bitmask like this: FilesystemIterator::KEY_AS_FILENAME | FilesystemIterator::FOLLOW_SYMLINKS Test script: --------------- <?php // __DIR__ contains only self - 'test.php' $iterator = new FilesystemIterator(__DIR__, FilesystemIterator::KEY_AS_FILENAME); foreach ($iterator as $key => $value) { echo $key; } $iterator2 = new FilesystemIterator(__DIR__, FilesystemIterator::FOLLOW_SYMLINKS | FilesystemIterator::KEY_AS_FILENAME); foreach ($iterator2 as $key => $value) { echo $key; } Expected result: ---------------- iterator: 'test.php' iterator2: 'test.php' Actual result: -------------- iterator: 'test.php' iterator2: 'path/test.php' PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 03:00:02 2025 UTC |
cmb@php.net FilesystemIterator::getFilename() work in any case, symlink not pathname - FilesystemIterator::key() mix links and paths - it's too wrong. FilesystemIterator::FOLLOW_SYMLINKS change keys of FilesystemIterator, but manual says: > makes RecursiveDirectoryIterator::hasChildren() follow symlinks. camporter1@dot.com your test for php8, I display results for php7 $iterator = new FilesystemIterator(__DIR__, FilesystemIterator::KEY_AS_FILENAME); foreach ($iterator as $key => $value) { var_export(strpos($key, __DIR__ . DIRECTORY_SEPARATOR) !== false); break; } $iterator->rewind(); var_export(strpos($iterator->key(), __DIR__ . DIRECTORY_SEPARATOR) !== false); $iterator2 = new FilesystemIterator(__DIR__, FilesystemIterator::FOLLOW_SYMLINKS | FilesystemIterator::KEY_AS_FILENAME); foreach ($iterator2 as $key => $value) { var_export(strpos($key, __DIR__ . DIRECTORY_SEPARATOR) !== false); break; } $iterator2->rewind(); var_export(strpos($iterator2->key(), __DIR__ . DIRECTORY_SEPARATOR) !== false); // result: false false true true // tested on PHP 7.3.26, Windows 10, MSVC15(Visual C++ 2017)