从多个方向读取文件

  • 本文关键字:读取 文件 方向 php sql
  • 更新时间 :
  • 英文 :


我正在尝试制作一个脚本,从某个文件夹中的多个目录中读取.sql文件,然后将它们执行到数据库中。

我该如何使下面的代码能够读取多个文件夹。[这些文件夹将来会被添加/删除,所以我需要它来自动查找任何没有任何部件名称的文件夹。

例如,我有一个名为"mysqls"的文件夹,在该文件夹中还有其他文件夹,如"text1"、"test2"。Test1和test2有不同的.sql文件,因为我想被执行。

<?php
$dirf    = 'mysqls';
$dir = scandir($dirf);
unset($dir['0']);
unset($dir['1']);
foreach($dir as $file) {

       $sql = file_get_contents($dirf . '/'. $file);
       $qr = $dbh->exec($sql);
}
?> 
$directory = new RecursiveDirectoryIterator('mysqls');
// Filter out "dot" folders
$filter = new DirnameFilter($directory, '/^(?!.)/');
// Filter sql files 
$filter = new FilenameFilter($filter, '/(?:sql)$/i');
foreach(new RecursiveIteratorIterator($filter) as $file) {
    $sql = file_get_contents($file);
    $qr = $dbh->exec($sql);
}

abstract class FilesystemRegexFilter extends RecursiveRegexIterator {
    protected $regex;
    public function __construct(RecursiveIterator $it, $regex) {
        $this->regex = $regex;
        parent::__construct($it, $regex);
    }
}
class FilenameFilter extends FilesystemRegexFilter {
    // Filter files against the regex
    public function accept() {
        return ( ! $this->isFile() || preg_match($this->regex, $this->getFilename()));
    }
}
class DirnameFilter extends FilesystemRegexFilter {
    // Filter directories against the regex
    public function accept() {
        return ( ! $this->isDir() || preg_match($this->regex, $this->getFilename()));
    }
}

使用RecursiveIteratorIterator()可能会出现类似的情况

<?php 
function scan_for_sql_files($path){
    $itdir = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST,
    RecursiveIteratorIterator::CATCH_GET_CHILD);
    $files = array();
    foreach ($itdir as $path=>$dir){
        if ($dir->isFile()){
            $ext = substr(strtolower($path), -3);
            if($ext == 'sql'){
                $files[] = array('path' => $path);
            }
        }
    }
    return $files;
}
//get files
$files = scan_for_sql_files('mysqls');
//Do sql
foreach($files as $file){
    $sql = file_get_contents($file['path']);
    $qr = $dbh->exec($sql);
}
?>
$iterator = new RecursiveDirectoryIterator('mysqls');
foreach($iterator as $fileinfo){
    if('sql' == $fileinfo->getExtension()){
        $sql = file_get_contents($fileinfo->getPathname());
        $qr = $dbh->exec($sql);
    }
}

最新更新