Php 从多个方向读取文件
我试图创建一个脚本,从某个文件夹的多个目录中读取.sql文件,然后将它们执行到数据库中 如何使下面的代码能够读取多个文件夹。[这些文件夹将在将来添加/删除,因此我需要它来自动查找没有任何partciular名称的文件夹 例如,我有一个名为mysqls的文件夹,在该文件夹中有其他文件夹,如“text1”、“test2”。Test1和test2有不同的.sql文件,我希望执行这些文件Php 从多个方向读取文件,php,sql,Php,Sql,我试图创建一个脚本,从某个文件夹的多个目录中读取.sql文件,然后将它们执行到数据库中 如何使下面的代码能够读取多个文件夹。[这些文件夹将在将来添加/删除,因此我需要它来自动查找没有任何partciular名称的文件夹 例如,我有一个名为mysqls的文件夹,在该文件夹中有其他文件夹,如“text1”、“test2”。Test1和test2有不同的.sql文件,我希望执行这些文件 <?php $dirf = 'mysqls'; $dir = scandir($dirf); unse
<?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);
}
?>
也许是这样的
我倾向于使用SPL的递归目录迭代器?你能解释一下吗?在提供的代码中,什么东西不起作用?@cen上面的代码起作用了。尽管我想知道如何加载多个目录..所以你不是一次打开并执行一个文件,而是要打开并执行多个目录?P请确保您必须为此使用多线程。
$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()));
}
}
<?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);
}
}