php实现扫描读取
PHP实现扫描读取的方法
使用scandir函数扫描目录
scandir函数是PHP内置的目录扫描函数,可以返回指定目录中的文件和子目录列表。该函数返回一个数组,包含目录中的所有文件和子目录名称。
$dir = '/path/to/directory';
$files = scandir($dir);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
echo $file . "\n";
}
}
使用DirectoryIterator类遍历目录
DirectoryIterator是PHP提供的面向对象的目录遍历工具,可以更灵活地处理文件和目录。
$dir = new DirectoryIterator('/path/to/directory');
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
echo $fileinfo->getFilename() . "\n";
}
}
使用RecursiveDirectoryIterator递归扫描
如果需要递归扫描子目录,可以使用RecursiveDirectoryIterator结合RecursiveIteratorIterator。
$dir = new RecursiveDirectoryIterator('/path/to/directory');
$iterator = new RecursiveIteratorIterator($dir);
foreach ($iterator as $fileinfo) {
if ($fileinfo->isFile()) {
echo $fileinfo->getPathname() . "\n";
}
}
使用glob函数匹配特定文件类型
glob函数可以根据模式匹配文件名,适合需要筛选特定类型文件的情况。
$files = glob('/path/to/directory/*.txt');
foreach ($files as $file) {
echo basename($file) . "\n";
}
读取文件内容
扫描到文件后,可以使用file_get_contents或fopen等函数读取文件内容。
$file = '/path/to/file.txt';
if (file_exists($file)) {
$content = file_get_contents($file);
echo $content;
}
处理大文件的分块读取
对于大文件,建议使用fopen和fgets逐行读取,避免内存问题。

$file = fopen('/path/to/largefile.txt', 'r');
while (!feof($file)) {
$line = fgets($file);
echo $line;
}
fclose($file);
注意事项
- 确保对扫描的目录有读取权限
- 处理文件路径时注意跨平台兼容性
- 对大文件操作时注意内存管理
- 考虑使用
try-catch处理可能出现的异常






